Annual Review: year2

This annual review is split into two sections: STaR report and Report. The STaR report is a copy and paste of the University of Bristol PGR reporting system that is required to be filled out for the report and mirrors a lot of the content (though in a shorter form) to that of the Report. The Report covers all aspects of the PhD to date and future plans. The report from year 1 is available on GitHub.


 

1 STaR report

1.1 Introduction

Title What lies behind the causal impact of body mass index (BMI) level and change on human health? Added value from complementary study design and deep metabolomic phenotyping

Maximum submission date 03/10/2021

1.2 Looking back

1.2.1 Research progress

  • We have a paper in review at HMG on a GWAS of glycosuria in ALSPAC and Northern Finish Birth Cohort (NFBC)
  • chapter 1: an introduction and background chapter - almost completed
  • chapter 2: a systematic review of ~150 papers - in the data extraction stages with an aim of finishing entirely by end of February
  • chapter 3: about instrumenting adiposity (small chapter) - partially started
  • chapter 4: observational analysis: adiposity -> metabolites; ALSPAC, FGFP, Biobank - yet to be started
  • chapter 5: MR: adiposity -> metabolites - all analysis done
  • chapter 6: visualisation of large MR analysis i.e. chapter 5 - needs finishing off and writing up
  • chapter 7/8: how to cluster metabolites and what rules to make for instrumenting these clsuters - yet to start
  • chapter 9: second step of the two step MR - have the analysis pipeline worked out
  • chapter 10: discussion/conclusion

1.2.2 Training

This figure shows the courses I have been on this year

1.2.3 Presenting your research

I have presented my work at the following:

1.2.4 Public engagement

I’ve done much less than last year:

  • Creative Reactions, lead - 50 artists and 50 reserachers with > 5,000 visitors
  • Creative Reactions, participated - research turned into an artwork
  • Talks - have given a number of talks to the public
  • MRC IEU @ Greenman
  • ~£20,000 in grants awarded in review period (including £14,985 from the EPSRC)
  • Nic and I are writing an application to the Wellcome Trust to fund a public engagement project for the reserach group for ~£50,000
  • I am working with a reserach fellow in Maths on a bid to Arts Council England for ~£50,000 - supported by Head of the School of Arts and Maths and PHSI (Caroline)

1.2.5 Teaching

I have taught on the following:

  • Mendelian randomization, Bristol Medical School short course
  • Mendelian randomization conference MR course, conference workshop
  • Introduction to R, Bristol Medical School short course
  • Introduction to data visualisation and web applications using R, Bristol Medical School short course
  • A one week course at the University of Pavia With Kaitlin: Causal Inference and Mendelian randomization, Department of Brain and Behavioural Sciences, University of Pavia, Italy

1.2.6 Summary / further comments

We are hoping to get funding for me to do a placement with Ruth Loos at Mount Sinai, New York to work on a body fat genetics project - this funding will cover an extension to my PhD.

1.3 Planning ahead

1.3.1 Research objectives

Over the next year my main objectives are:

  1. Get glycosuria GWAS paper published
  2. Finish systematic review
  3. Finish chapters 1-6 entirely including all writing analysis and any manuscripts from this work
  4. Complete one clustering analysis and begin work on a second and third (chapters 7 and 8)

In the final 6 months:

  1. Finish chapters 7 and 8
  2. Finish chapter 9
  3. Finish chapter 10
  4. Submit

1.3.2 Training

I am booked onto the Prediction short course at Bristol. I hope to do a placement at Mount Sinai with Ruth Loos

1.3.3 Communicating reserach

I plan on having the following outputs from the coming 12 months:

  • Systematic review - publication
  • MR Vis - R package, web application, publication
  • metabolite MR work - poster/presentation at Metabolomics 2020 and IGES 2020
  • if the placement goes ahead Ruth has suggested this would probably lead to a paper
  • IGES 2020 - 1-3 July 2020, Seul, South Korea (abstracts February 3rd)
  • Metabolomics 2020 - 6-10 July 2020, Shanghai, China

1.4 Further comments

No further comments


2 Report

2.1 Title page

Current date: 26/12/2019

Author: Matthew Lee

Supervisors:

  • Nic Timpson
  • Kaitlin Wade
  • Laura Corbin

Title: What lies behind the causal impact of body mass index (BMI) level and change on human health? Added value from complementary study design and deep metabolomic phenotyping*

Date of commencement: 01/10/2017

Expected submission: 01/10/2021

2.2 Main report

2.2.1 Overview of PhD

I am on a 3.5-year GW4 BioMed MRC DTP PhD. I am in my third year and expect to finish April 2021. The year 1 report and presentation can be downloaded from GitHub.

2.2.1.1 Rationale

The number of individuals suffering from overweight and obesity is at an all time high. Globally, 39% and 13% of adults (18+) are estimated to be overweight or obese1(Figure 1 and 2) and this number is expected to continue to rise24. It is estimated that obesity is repsonsible for 8% of global deaths5(Figure 3). With the number of overweight and obese individuals increasing24 it is likely the number of premature deaths will rise too.

Proportion of overweight individuals

Figure 1: Proportion of overweight individuals

Figure 1, reproduced from Ritchie and Roser (2019)6, shows the share of adults (18+) that are overweight globally and in 5 selected geographic regions (Americas, Europe, Eastern Mediteranean, Africa and Sout East Asia) from 1975 to 2016.

Proportion of obese individuals

Figure 2: Proportion of obese individuals

Figure 2, reproduced from Ritchie and Roser (2019)6, shows the share of adults (18+) that are obese globally and in 5 selected geographic regions (Americas, Europe, Eastern Mediteranean, Africa and Sout East Asia) from 1975 to 2016.

Number of deaths by risk factor

Figure 3: Number of deaths by risk factor

Figure 3, reproduced from Ritchie and Roser (2019)6, shows the number of deaths for 26 risk factors globally in 2017 for all age groups. Obesity is the 5th leading cause of death with 3.41 million deaths in 2017.

Conventionally, overweight and obesity is measured using body mass index (BMI), with overweight and obesity classified as a BMI of 25–29.9 kg/m2 and > 30 kg/m2 respectively. A normal weight classification is a BMI of 18.5–24.9 kg/m2, with an underweight class below this. In the crudest sense, BMI is a measure of weight given an adjustment of height. BMI is associated with numerous diseases and provides an accurate measure of risk at a population level for many. However, BMI does not have the resolution to accurately measure an individual’s body composition710 i.e. the amount and location of adipose tissue within the body - studies have pointed to a more important role for fat deposition in disease development11,12. As such, complimentary assesment of increased adiposity using a combination of body composition measures (i.e. BMI, waist hip ratio, body fat %) may provide additional information into associations with disease13,14.

Adipose tissues are prolific signallers to surrounding and systemic tissues15,16 leading to large downstream effects with potentially harmful consequences1619. Changes to adipose tissue abundance is reflected in adipocyte signalling. This change is concurrent with shifts in metabolic profiles, where alterations to the level of one metabolite does not occur in isolation. Metabolites sit at the interface between genetic and non-genetic factors, provide a useful read-out of physiological function, and have been genetically well characterised20,21.

2.2.1.2 Aims

The biological pathway from increased adiposity to diseases development is unclear. Adipose tissue is a prolific signalling organ resulting in systemic changes across the body. Metabolic changes may be a result of increased adiposity and subsequent signalling and evidence has highlited the role of metabolites in disease. The aim of this thesis is to:

  • Identify metabolites that sit on the causal pathway from increased adiposity to disease

2.2.1.3 Objectives

In order to achieve this aim and better understand the biological mechanisms underlying disease development this thesis will:

  1. Identify all traits causally associated with increased adiposity
    • we will perform a systematic review of allMenderlin randomization studies investigating measures of increased adiposity with any outcome
    • we will use the findings from this review to guide subsequent work
  1. Identify and describe appropriate instrumentation of increased adiposity
  1. Identify metabolites associated with increased adiposity
    • We will use observational and Mendelian randomization analyses to identify metabolites associated with multiple measures of increased adiposity
  1. Design and implement methods to cluster metabolites
    • Metabolites are complicated and highly correlated; we will develop methods to cluster metabolites and propose rules for instrumenting metabolites and clusters for Mendelian randomization analyses
  1. Identify diseases associated with metabolites
    • We will use observational and Mendelian randomization analyses to identify metabolites associated with diseases
    • We will be guided by the systematic review and metabolites we identify as associated with increased adiposity

2.2.1.4 Layout

Overview of PhD chapters

Figure 4: Overview of PhD chapters

Figure 4 shows an overview of proposed chapters for the thesis, including progress to date and expected outcomes, in order to achieve the described aim and objectives. To enlarge: right click -> open image in new tab

2.2.2 Chapter progress

The thesis is laid out as a pipeline checklist of what to do when researchers want to understand the causal associations between exposures and outcomes using metabolites as intermediates. Chapter 1 introduces the context of the thesis and what we currently know about increased adiposity and diseases. The pipeline starts with chapter 2, identification of causally associated diseases, and progresses through choosing instruments for exposures, performing observational analysis and the first step of an MR, visulaising the reuslts of MR work on a large scale, instrumenting metabolites as intermediates and performing the final MR stage of intermediate to disease. The below Gantt chart lays out the plan for chapter progress in the coming 12 months (hover over a section to reveal the name):

 

 

2.2.2.1 Chapter 1: Introduction

2.2.2.1.1 Overview

This chapter provides the context of the thesis, i.e. what diseases increased adiposity is associated with. It provides background on adipose tissue and the products of adipose tissue such as metabolites. It gives an overview of observational research looking at diseases associated with increased adiposity. It goes on to explore what metabolites might provide in understanding these associations and how MR may help investiagte these associations. This chapter includes the aims and objectives of the thesis which are described above.

2.2.2.1.2 Progress

The chapter is half finished. An unoformatted draft can be viewed on GitHub.

 

2.2.2.2 Chapter 2: Systematic review

2.2.2.2.1 Overview

Chapter 1 shows that the literature is clear that numerous diseases are associated with increased adiposity. However the causal associations between increased adiposity is not as clear. As MR has been increasingly used over the years and more datasets have become available a large body of evidence has built up for causal associations between increased adiposity and a number of diseases. Chapter 2 sets out to synthesise all of this evidence and identify the diseases causally associated with increased adiposity. These diseases will be used in the second step of the MR to identify whether metabolites are associated with the diseases. The systematic review will include a meta-analysis, however time constraints of the PhD may mean this is not completed within the time frame.

2.2.2.2.2 Progress

~150 papers were identified and included for data extraction. Data extraction is on-going and expected to be completed end of February with a draft manuscript/chapter for end March.

 

2.2.2.3 Chapter 3: Instrumentation

2.2.2.3.1 Overview

Before starting an analysis one must first identify the exposure. In MR analysis identifying the exposure includes deciding how to instrument the exposure. Traditionally this has been to select independent genetic variants reaching a genome-wide significance threshold (5 x 10-8) from the largest available GWAS. For increased adiposity measures, especially BMI, their are now many GWASs available for reserahcers to choose from. Chapter 3 explores how to instrument increased adiposity, including investigating the relationship between the exposures and the different GWASs available.

2.2.2.3.2 Progress

This will be a short chapter with a small amount of analysis showing the appropriateness of the instruments selected for the MR analysis. Some of the analysis has been conducted and some of the chapter has been written. An unoformatted draft can be viewed on GitHub.

 

2.2.2.4 Chapter 4: Observational analysis

2.2.2.4.1 Overview

Having established how to instrument increased adiposity in observational and MR analsysis in Chapter 3, this chapter explores the observational associations of increased adiposity and metabolites. The chapter will focus on confounders.

2.2.2.4.2 Progress

Not started. I now have access to UK Biobank data and we should have access to the metabolomics data in the coming months.

 

2.2.2.5 Chapter 5: MR step 1

2.2.2.5.1 Overview

This chapter is the first step of the MR process in identifying intermediate metabolites. The main analysis includes 3 exposures and 123 metabolites from Kettunen et al (2016)21 Additional sensitivity analysis of 17 other measures of adiposity and 4 methods has also been performed. The total number of tests performed is 9840. In addition to this I have performed the same analysis with an additional metabolite data set of 452 metabolites20 (3.616^{4} total tests) - I think this second analysis will probably not be included in the thesis as the metabolite GWAS is not as well powered or clean as the Kettunene metabolite GWAS.

2.2.2.5.2 Progress

I am 2/3 of the way through the manuscript which has been written as if i was writing the chapter. I need to finish the manuscript and transfer this into the chapter and then cut the manuscript down to form a publishable document. This project is my first in attempting to be completely reproducible with my code and is laid out in full on GitHub (currently private).

 

2.2.2.6 Chapter 6: MR Viz

2.2.2.6.1 Overview

Having performed a large MR analysis of 3 exposures and 123 outcomes (369 tests) as the main analysis, plus sensitivity analysis for 3 methods (1476) and an additional 17 measures of adiposity (2091) each with 3 additional methods (8364) the total number of tests is 9840. It is difficult to visualise and interpret all of this data. Given that we want to look at the global profile of metabolite changes as a result of increased adiposity we need to be able to visualise this data in an interperatebl manner. This chapter demonstrates a web application and R package developed to create Circos plots to visualise and interpret these types of MR analyses.

2.2.2.6.2 Progress

I am 2/3 of the way through the manuscript. The manuscript and the GitHub page will be adapted to form the chapter so 2/3 of the chapter is complete essentially. The web application is in a beta stage and is useable - I need to do some focus-group work with the group to make the website user friendly and incorporate any additional features/wording they think is needed. The R package is available on GitHub and is in the final stage with testing needing doing. All of this, including the manuscript, should be finished within the next two months, I just need to get some people together to play around with the app and R package to make sure it works and doesnt break.

Circos plot produced using R package from analysis performed in Chapter 5

Figure 5: Circos plot produced using R package from analysis performed in Chapter 5

 

2.2.2.7 Chapter 7: Clustering metabolites

2.2.2.7.1 Overview

Having identified metabolites associated with increased adiposity from visualising the global profile we need to decide how to instrument them in the second step of the MR analysis. There are in essence two ways to do this, either use each metabolite individually as one would normally or combine metabolites into a group that one then instruments. In chapter 9 I will use both individual metabolites and groups. In this chapter I will explore a number of different methods for clustering metabolites into groups that can be instrumented.

2.2.2.7.2 Progress

Not started. Current ideas for clustering methods to explore:

  • Priors
    • class
    • subclass
    • biological pathway
    • size
    • shared genetic variants
  • No priors
    • PCA
    • factor analysis
    • Hierarchical clustering
    • density clustering
    • self organising map
    • LDSR
    • ontology
      • have discussed with Ben Elsworth - a pipeline is set-up that can be adpated to implement this and would be an interesting case study for their paper.

Once clustered the group of metabolites would then be treated as the group in an MR analysis and the genetic variants for each metabolite in the group would be used to instrument the group.

 

2.2.2.8 Chapter 8: Instrumentation

2.2.2.8.1 Overview

Having now explored the different methods for clustering the metabolites we need to establish the rules for how to then instrument these different types of clusters. This chapter will layout a set of rules for instrumenting metabolites in MR analysis. It will give use cases. This is a continuation of Chapter 7 and it feels liek a distinct chpater at the moment but when more work has been done it could be combined with Chapter 7.

2.2.2.8.2 Progress

Not started.

 

2.2.2.9 Chapter 9: MR step 2

2.2.2.9.1 Overview

Having now identified metabolites associated with increased adiposity, metabolite clusters, and how to isntrument clusters we can perform the second step of the MR investigating metabolite associations with diseases. It will be possible to run the MR against all diseases in MR Base and this will be presented in a searchable database online. We will only discuss diseases identified in the systematic review however.

2.2.2.9.2 Progress

Working with Ben Elsworth to categorise all MR Base GWASs into categories for easy subsetting to perform analysis on for example all anthropometric traits with all smoking traits. I have the ground work for the code completed for this analysis and will test using a few metabolites and a few diseases for which we know there is, isnt and are unsure of the association. The code is scalable so once Chapter7/8 are complete the code can be run and completed over a week.

 

2.2.2.10 Chapter 10: Discussion/limitations/conclusion

2.2.2.10.1 Overview

This chapter will tie everything together and present a diagram that outlines the pipeline for performing MR analysis of this type.

2.2.2.10.2 Progress

Not started….

 

2.2.3 Other

2.2.3.1 Courses

I have been on a number of courses this year (shown in figure). I plan on going on ………..

2.2.3.2 Conferenes/ presentations

I have presented my work at the following:

2.2.3.3 Teaching

I have taught on the following:

  • Mendelian randomization, Bristol Medical School short course
  • Mendelian randomization conference MR course, conference workshop
  • Introduction to R, Bristol Medical School short course
  • Introduction to data visualisation and web applications using R, Bristol Medical School short course
  • A one week course at the University of Pavia With Kaitlin: Causal Inference and Mendelian randomization, Department of Brain and Behavioural Sciences, University of Pavia, Italy

2.2.3.4 Public engagement

I’ve done much less than last year:

  • Creative Reactions, lead - 50 artists and 50 reserachers with > 5,000 visitors
  • Creative Reactions, participated - research turned into an artwork
  • Talks - have given a number of talks to the public
  • MRC IEU @ Greenman
  • ~£20,000 in grants awarded in review period (including £14,985 from the EPSRC)
  • Nic and I are writing an application to the Wellcome Trust to fund a public engagement project for the reserach group for ~£50,000
  • I am working with a reserach fellow in Maths on a bid to Arts Council England for ~£50,000 - supported by Head of the School of Arts and Maths and the Population Health Science Institute

2.2.4 Other work

2.2.4.1 Placement

Funds have been requested (to extend the PhD by three months) to enable Matthew to work with Professor Ruth Loos at the Ichan School of Medicine at Mount Sinai, New York and undergo training in computational and data analytics to characterise the genetics of body composition, which will enable him to expand his current analysis investigating adiposity -> metabolites -> diseases to more accurate measures of body composition.

Matthew has investigated the effects of BMI and WHR but the lack of strong genetic characterisation for BF limits the understanding we can gain from these analyses. Matthew has also been using combinations of measures (profiles) to investigate the underlying biological mechanisms driving associations and is developing ways to investigate metabolites as profiles of risk. Combining the skills, expertise and data of our and Professor Loos’ groups will enable Matthew to expand his work into BF, and thus gain a better understanding of the biological mechanisms driving associations between increased adiposity and disease.

Matthew will work with Professor Loos, a world leader in human genetics and body composition, to explore BF genetics and increased adiposity profiles. Professor Loos is a member of the steering committee for the global BMI genome-wide association study (GWAS) consortia and set-up the global body composition GWAS consortia. The Loos Lab are an interdisciplinary team aiming to identify and characterize genes to better understand biological pathways. The team includes JJ Wang, Postdoctoral Fellow, has expertise in integrating genomics and metabolomics data; Arden Moscati, a Computational Geneticist, has expertise in etiological overlap between traits and diseases; Daiane Hemerich, Postdoctoral Fellow, has expertise in fine-mapping and functional annotation. Much of the labs work is conducted in BioMe, a biobank of ~50,000 ancestrally diverse (European (32%), African (24%), Hispanic/Latino (35%) and other/mixed ancestries (9%)) individuals.

Matthew will contribute to characterizing the genetics of BF using whole genome and exome sequence data. This will involve the use of fine-mapping, co-localisation and integrated approaches to investigate the genetics of multiple measures of body composition. This placement, discussed and agreed with Professor Loos, is a natural and valuable progression of Matthew’s work to develop our understanding of the mechanisms driving disease risk. With UK Biobank due to release metabolite data at a similar time, the placement will provide the appropriate data and skills to (i) identify genetic variants for MR investigations of metabolites and diseases and (ii) to integrate these genetic variants with the metabolomics work already completed and to be performed in UK Biobank.

2.2.4.2 GWAS of glycosuria

We conducted a genome-wide association study (GWAS) of glycosuria (sugar in urine) in pregnant mothers from the Avon Longitudinal Study of Parents and Children (ALSPAC). Due to a lack of available external data sources replication was not possible, instead we performed a GWAS in the Northern Finland Birth Cohort 1986 (NFBC1986) where we used mothers phenotype and the mothers’ offsprings genotype. To estimate the maternal effects from offspring genotypes we doubled the effect estimates and standard errors of the GWAS results2224. The GitHub repository provides all scripts and data. We are currenlty making revisions to reviewer comments.

2.2.4.2.0.1 Abstract

Glycosuria is a condition where glucose is detected in urine at higher concentrations than normal. Glycosuria at some point during pregnancy has an estimated prevalence of 50% and is associated with adverse outcomes in both mothers and offspring. Little is currently known about the genetic contribution to this trait or the extent to which it overlaps with other seemingly related traits, e.g. diabetes. We performed a genome-wide association study (GWAS) for self-reported glycosuria in pregnant mothers from the Avon Longitudinal Study of Parents and Children (ALSPAC; cases/controls=1,249/5,140). We identified two loci, one of which (lead SNP=rs13337037; chromosome 16; odds ratio (OR) of glycosuria per effect allele: 1.42; 95%CI: 1.30,1.56; P=1.97x10-13) was then validated using an obstetric-measure of glycosuria measured in the same cohort (227/6,639). We performed a secondary GWAS in the 1986 Northern Finland Birth Cohort (NFBC1986; 747/2,991) using midwife-reported glycosuria and offspring genotype as a proxy for maternal genotype. The equivalent effect estimate for rs13337037 in this cohort was OR 1.57 (95% CI: 1.30,1.83; P=9.8x10-4). In follow-up analyses, we saw little evidence of shared genetic underpinnings with the exception of urinary albumin-to-creatinine ratio (Rg=0.64; SE=0.22; P=0.0042), a biomarker of kidney disease. In conclusion, we identified a genetic association with self-reported glycosuria during pregnancy, with the lead SNP located 15kB upstream of SLC5A2, a target of antidiabetic drugs. The lack of strong genetic correlation with seemingly related traits such as type 2 diabetes suggests different genetic risk factors exist for glycosuria during pregnancy.

Manhattan plot of a GWAS of glycosuria in ALSPAC mothers

Figure 6: Manhattan plot of a GWAS of glycosuria in ALSPAC mothers

2.3 Turnitin

A copy of the Turnitin report of your end of year report – after completing your end of year report you should submit it to Turnitin via Blackboard as per the instructions provided during your induction. If you are unsure about how to do this please contact your Postgraduate Tutor and/or your School’s Graduate Directors. After submitting your report Turnitin will generate a similarity report which can be downloaded. Please review this, discuss any concerns with your supervisor and submit a copy with your end of year progress report.

2.4 Presentation

Link to presentation

References

1. World Health Organisation. Factsheet: Obesity and overweight. (2018).

2. Ng, M. et al. Global, regional, and national prevalence of overweight and obesity in children and adults during 1980-2013: a systematic analysis for the Global Burden of Disease Study 2013. Lancet (London, England) 384, 766–781 (2014).

3. (NCD-RisC), N. R. F. C. Trends in adult body-mass index in 200 countries from 1975 to 2014: a pooled analysis of 1698 population-based measurement studies with 192 million participants. The Lancet 387, 1377–1396 (2016).

4. Abarca-Gómez, L. et al. Worldwide trends in body-mass index, underweight, overweight, and obesity from 1975 to 2016: a pooled analysis of 2416 population-based measurement studies in 128·9 million children, adolescents, and adults. The Lancet 390, 2627–2642 (2017).

5. Stanaway, J. D. et al. Global, regional, and national comparative risk assessment of 84 behavioural, environmental and occupational, and metabolic risks or clusters of risks for 195 countries and territories, 1990–2017: a systematic analysis for the Global Burden of Disease Stu. The Lancet 392, 1923–1994 (2018).

6. Ritchie, H. & Roser, M. Obesity. Published online at OurWorldInData.org. Retrieved from: ’https://ourworldindata.org/obesity’ [Online Resource] 05/12/2019. (2019).

7. Pischon, T. et al. General and Abdominal Adiposity and Risk of Death in Europe. New England Journal of Medicine 359, 2105–2120 (2008).

8. Romero-Corral, A. et al. Accuracy of body mass index in diagnosing obesity in the adult general population. International Journal of Obesity 32, 959–966 (2008).

9. Okorodudu, D. O. et al. Diagnostic performance of body mass index to identify obesity as defined by body adiposity: a systematic review and meta-analysis. International Journal of Obesity 34, 791–799 (2010).

10. Pasco, J. A., Nicholson, G. C., Brennan, S. L. & Kotowicz, M. A. Prevalence of obesity and the relationship between the body mass index and body fat: Cross-sectional, population-based data. PLoS ONE 7, (2012).

11. Sahakyan, K. R. et al. Normal-Weight Central Obesity: Implications for Total and Cardiovascular Mortality. Annals of internal medicine 163, 827–835 (2015).

12. Hamer, M., O’Donovan, G., Stensel, D. & Stamatakis, E. Normal-Weight Central Obesity and Risk for Mortality. Annals of Internal Medicine 166, 917–918 (2017).

13. World Health Organisation. Waist Circumference and Waist-Hip Ratio: Report of a WHO Expert Consultation. (WHO, 2008).

14. Prospective Studies Collaboration et al. Body-mass index and cause-specific mortality in 900 000 adults: collaborative analyses of 57 prospective studies. Lancet (London, England) 373, 1083–1096 (2009).

15. Lehr, S., Hartwig, S. & Sell, H. Adipokines: A treasure trove for the discovery of biomarkers for metabolic disorders. PROTEOMICS – Clinical Applications 6, 91–101 (2012).

16. Fasshauer, M. & Blüher, M. Adipokines in health and disease. Trends in Pharmacological Sciences 36, 461–470 (2015).

17. Blüher, M. Adipose tissue dysfunction contributes to obesity related metabolic diseases. Best Practice & Research Clinical Endocrinology & Metabolism 27, 163–177 (2013).

18. Blüher, M. & Mantzoros, C. S. From leptin to other adipokines in health and disease: Facts and expectations at the beginning of the 21st century. Metabolism 64, 131–145 (2015).

19. Luo, L. & Liu, M. Adipose tissue in control of metabolism. Journal of Endocrinology 231, R77–R99 (2016).

20. Shin, S.-Y. et al. An atlas of genetic influences on human blood metabolites. Nature Genetics 46, 543 (2014).

21. Kettunen, J. et al. Genome-wide study for circulating metabolites identifies 62 loci and reveals novel systemic effects of LPA. Nature Communications 7, 11122 (2016).

22. Wacholder, S. et al. The kin-cohort study for estimating penetrance. American journal of epidemiology 148, 623–630 (1998).

23. Joshi, P. K. et al. Variants near CHRNA3/5 and APOE have age- and sex-related effects on human lifespan. Nature communications 7, 11174 (2016).

24. Joshi, P. K. et al. Genome-wide meta-analysis associates HLA-DQA1/DRB1 and LPA and lifestyle factors with human longevity. Nature communications 8, 910 (2017).

LS0tCm91dHB1dDoKICAjIHdvcmRfZG9jdW1lbnQ6CiAgYm9va2Rvd246Omh0bWxfZG9jdW1lbnQyOgogICAgdG9jOiB0cnVlCiAgICB0b2NfZGVwdGg6IDMKICAgIG51bWJlcl9zZWN0aW9uczogdHJ1ZQogICAgdG9jX2Zsb2F0OiAKICAgICAgICBzbW9vdGhfc2Nyb2xsOiBmYWxzZQogICAgICAgIGNvbGxhcHNlZDogZmFsc2UKICAgIGRmX3ByaW50OiBwYWdlZAogICAgY29kZV9kb3dubG9hZDogdHJ1ZQogICAgaGlnaGxpZ2h0ZXI6IG51bGwKICAgIHRoZW1lOiBmbGF0bHkKYmlibGlvZ3JhcGh5OiAuLi8uLi9pbmRleC9iaWIvbGlicmFyeS5iaWIKY3NsOiAuLi8uLi9pbmRleC9jc2wvbmF0dXJlLmNzbApzcGFjZV9iZXR3ZWVfcGFyYWdyYXBoczogdHJ1ZQpmaWdfY2FwdGlvbjogdHJ1ZQphbHdheXNfYWxsb3dfaHRtbDogeWVzCmxpbmstY2l0YXRpb25zOiB0cnVlCi0tLQoKCgpgYGB7ciBpbmNsdWRlPUZBTFNFfQojIyBwYWNrYWdlcwpsaWJyYXJ5KHRpZHl2ZXJzZSkKbGlicmFyeShrYWJsZUV4dHJhKQpsaWJyYXJ5KGZsZXh0YWJsZSkKbGlicmFyeShyb3dyKQpgYGAKCjxzdHlsZT4KYm9keSB7CnRleHQtYWxpZ246IGp1c3RpZnl9Cjwvc3R5bGU+CgojIEFubnVhbCBSZXZpZXc6IHllYXIyIHstfQoKVGhpcyBhbm51YWwgcmV2aWV3IGlzIHNwbGl0IGludG8gdHdvIHNlY3Rpb25zOiBbU1RhUiByZXBvcnRdKCNzdGFyLXJlcG9ydCkgYW5kIFtSZXBvcnRdKCNyZXBvcnQpLiBUaGUgW1NUYVIgcmVwb3J0XSgjc3Rhci1yZXBvcnQpIGlzIGEgY29weSBhbmQgcGFzdGUgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQnJpc3RvbCBQR1IgcmVwb3J0aW5nIHN5c3RlbSB0aGF0IGlzIHJlcXVpcmVkIHRvIGJlIGZpbGxlZCBvdXQgZm9yIHRoZSByZXBvcnQgYW5kIG1pcnJvcnMgYSBsb3Qgb2YgdGhlIGNvbnRlbnQgKHRob3VnaCBpbiBhIHNob3J0ZXIgZm9ybSkgdG8gdGhhdCBvZiB0aGUgW1JlcG9ydF0oI3JlcG9ydCkuIFRoZSBbUmVwb3J0XSgjcmVwb3J0KSBjb3ZlcnMgYWxsIGFzcGVjdHMgb2YgdGhlIFBoRCB0byBkYXRlIGFuZCBmdXR1cmUgcGxhbnMuIFRoZSByZXBvcnQgZnJvbSB5ZWFyIDEgaXMgYXZhaWxhYmxlIG9uIFtHaXRIdWJdKGh0dHBzOi8vZ2l0aHViLmNvbS9tYXR0bGVlODIxLzAwMF90aGVzaXMvdHJlZS9tYXN0ZXIvcmV2aWV3cy95ZWFyMSkuCgpfX18KClwgIAoKIyBTVGFSIHJlcG9ydCB7I3N0YXItcmVwb3J0fQojIyBJbnRyb2R1Y3Rpb24KCioqVGl0bGUqKgpXaGF0IGxpZXMgYmVoaW5kIHRoZSBjYXVzYWwgaW1wYWN0IG9mIGJvZHkgbWFzcyBpbmRleCAoQk1JKSBsZXZlbCBhbmQgY2hhbmdlIG9uIGh1bWFuIGhlYWx0aD8gQWRkZWQgdmFsdWUgZnJvbSBjb21wbGVtZW50YXJ5IHN0dWR5IGRlc2lnbiBhbmQgZGVlcCBtZXRhYm9sb21pYyBwaGVub3R5cGluZwoKKipNYXhpbXVtIHN1Ym1pc3Npb24gZGF0ZSoqCjAzLzEwLzIwMjEKCiMjIExvb2tpbmcgYmFjawojIyMgUmVzZWFyY2ggcHJvZ3Jlc3MKCiogV2UgaGF2ZSBhIHBhcGVyIGluIHJldmlldyBhdCBITUcgb24gYSBHV0FTIG9mIGdseWNvc3VyaWEgaW4gQUxTUEFDIGFuZCBOb3J0aGVybiBGaW5pc2ggQmlydGggQ29ob3J0IChORkJDKQoqIGNoYXB0ZXIgMTogYW4gaW50cm9kdWN0aW9uIGFuZCBiYWNrZ3JvdW5kIGNoYXB0ZXIgLSBhbG1vc3QgY29tcGxldGVkCiogY2hhcHRlciAyOiBhIHN5c3RlbWF0aWMgcmV2aWV3IG9mIH4xNTAgcGFwZXJzIC0gaW4gdGhlIGRhdGEgZXh0cmFjdGlvbiBzdGFnZXMgd2l0aCBhbiBhaW0gb2YgZmluaXNoaW5nIGVudGlyZWx5IGJ5IGVuZCBvZiBGZWJydWFyeQoqIGNoYXB0ZXIgMzogYWJvdXQgaW5zdHJ1bWVudGluZyBhZGlwb3NpdHkgKHNtYWxsIGNoYXB0ZXIpIC0gcGFydGlhbGx5IHN0YXJ0ZWQKKiBjaGFwdGVyIDQ6IG9ic2VydmF0aW9uYWwgYW5hbHlzaXM6IGFkaXBvc2l0eSAtPiBtZXRhYm9saXRlczsgQUxTUEFDLCBGR0ZQLCBCaW9iYW5rIC0geWV0IHRvIGJlIHN0YXJ0ZWQKKiBjaGFwdGVyIDU6IE1SOiBhZGlwb3NpdHkgLT4gbWV0YWJvbGl0ZXMgLSBhbGwgYW5hbHlzaXMgZG9uZQoqIGNoYXB0ZXIgNjogdmlzdWFsaXNhdGlvbiBvZiBsYXJnZSBNUiBhbmFseXNpcyBpLmUuIGNoYXB0ZXIgNSAtIG5lZWRzIGZpbmlzaGluZyBvZmYgYW5kIHdyaXRpbmcgdXAKKiBjaGFwdGVyIDcvODogaG93IHRvIGNsdXN0ZXIgbWV0YWJvbGl0ZXMgYW5kIHdoYXQgcnVsZXMgdG8gbWFrZSBmb3IgaW5zdHJ1bWVudGluZyB0aGVzZSBjbHN1dGVycyAtIHlldCB0byBzdGFydAoqIGNoYXB0ZXIgOTogc2Vjb25kIHN0ZXAgb2YgdGhlIHR3byBzdGVwIE1SIC0gaGF2ZSB0aGUgYW5hbHlzaXMgcGlwZWxpbmUgd29ya2VkIG91dAoqIGNoYXB0ZXIgMTA6IGRpc2N1c3Npb24vY29uY2x1c2lvbgoKIyMjIFRyYWluaW5nClRoaXMgZmlndXJlIHNob3dzIHRoZSBjb3Vyc2VzIEkgaGF2ZSBiZWVuIG9uIHRoaXMgeWVhcgoKYGBge3IgZWNobz1GQUxTRSwgb3V0LndpZHRoPScxMDAlJ30Ka25pdHI6OmluY2x1ZGVfZ3JhcGhpY3MoInRyYWluaW5nLnBuZyIpCmBgYAoKIyMjIFByZXNlbnRpbmcgeW91ciByZXNlYXJjaApJIGhhdmUgcHJlc2VudGVkIG15IHdvcmsgYXQgdGhlIGZvbGxvd2luZzoKCiogRmFjdWx0eSBvZiBIZWFsdGggU2NpZW5jZXMgcmVzZXJhY2ggc2hvd2Nhc2UsICoqcHJlc2VudGF0aW9uKiogLSBbTWV0YWJvbGl0ZSBwcm9maWxlcyBhcyBtYXJrZXJzIG9mIHJpc2tdKGh0dHBzOi8vbWF0dGxlZTgyMS5naXRodWIuaW8vcG9zdGVyc19wcmVzZW50YXRpb25zLzIwMTkvRm9IU19zaG93Y2FzZV8yMDE5LnBkZikKKiBGYWN1bHR5IG9mIEhlYWx0aCBTY2llbmNlcyByZXNlcmFjaCBzaG93Y2FzZSwgKipwb3N0ZXIqKiAtIFtNZXRhYm9saXRlIHByb2ZpbGluZyBvZiBtdWx0aXBsZSBtZWFzdXJlcyBvZiBhZGlwb3NpdHk6IEEgTWVuZGVsaWFuIHJhbmRvbWl6YXRpb24gYW5hbHlzaXNdKGh0dHBzOi8vbWF0dGxlZTgyMS5naXRodWIuaW8vcG9zdGVyc19wcmVzZW50YXRpb25zLzIwMTkvbWV0YWJvbG9taWNzXzIwMTkucGRmKQoqIE1ldGFib2xvbWljcyAyMDE5LCAqKnBvc3RlcioqIC0gW01ldGFib2xpdGUgcHJvZmlsaW5nIG9mIG11bHRpcGxlIG1lYXN1cmVzIG9mIGFkaXBvc2l0eTogQSBNZW5kZWxpYW4gcmFuZG9taXphdGlvbiBhbmFseXNpc10oaHR0cHM6Ly9tYXR0bGVlODIxLmdpdGh1Yi5pby9wb3N0ZXJzX3ByZXNlbnRhdGlvbnMvMjAxOS9tZXRhYm9sb21pY3NfMjAxOS5wZGYpCiogTVIgY29uZmVyZW5jZSAyMDE5LCAqKnBvc3RlcioqIC0gW01SLVZpczogQSB0b29sIGZvciB0aGUgdmlzdWFsaXNhdGlvbiBvZiBoaWdoLWRpbWVuc2lvbmFsIE1lbmRlbGlhbiByYW5kb21pemF0aW9uIHJlc3VsdHNdKGh0dHBzOi8vbWF0dGxlZTgyMS5naXRodWIuaW8vcG9zdGVyc19wcmVzZW50YXRpb25zLzIwMTkvTVJfY29uZmVyZW5jZV8yMDE5LnBkZikKCgojIyMgUHVibGljIGVuZ2FnZW1lbnQKSSd2ZSBkb25lIG11Y2ggbGVzcyB0aGFuIGxhc3QgeWVhcjoKCiogQ3JlYXRpdmUgUmVhY3Rpb25zLCBsZWFkIC0gNTAgYXJ0aXN0cyBhbmQgNTAgcmVzZXJhY2hlcnMgd2l0aCA+IDUsMDAwIHZpc2l0b3JzCiogQ3JlYXRpdmUgUmVhY3Rpb25zLCBwYXJ0aWNpcGF0ZWQgLSByZXNlYXJjaCB0dXJuZWQgaW50byBhbiBbYXJ0d29ya10oaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9wL0J4QUlDcURBOTZGLykKKiBUYWxrcyAtIGhhdmUgZ2l2ZW4gYSBudW1iZXIgb2YgdGFsa3MgdG8gdGhlIHB1YmxpYwoqIE1SQyBJRVUgQCBHcmVlbm1hbgoqIH7CozIwLDAwMCBpbiBncmFudHMgYXdhcmRlZCBpbiByZXZpZXcgcGVyaW9kIChpbmNsdWRpbmcgwqMxNCw5ODUgZnJvbSB0aGUgRVBTUkMpCiogTmljIGFuZCBJIGFyZSB3cml0aW5nIGFuIGFwcGxpY2F0aW9uIHRvIHRoZSBXZWxsY29tZSBUcnVzdCB0byBmdW5kIGEgcHVibGljIGVuZ2FnZW1lbnQgcHJvamVjdCBmb3IgdGhlIHJlc2VyYWNoIGdyb3VwIGZvciB+wqM1MCwwMDAKKiBJIGFtIHdvcmtpbmcgd2l0aCBhIHJlc2VyYWNoIGZlbGxvdyBpbiBNYXRocyBvbiBhIGJpZCB0byBBcnRzIENvdW5jaWwgRW5nbGFuZCBmb3IgfsKjNTAsMDAwIC0gc3VwcG9ydGVkIGJ5IEhlYWQgb2YgdGhlIFNjaG9vbCBvZiBBcnRzIGFuZCBNYXRocyBhbmQgUEhTSSAoQ2Fyb2xpbmUpCgojIyMgVGVhY2hpbmcKSSBoYXZlIHRhdWdodCBvbiB0aGUgZm9sbG93aW5nOgoKKiBNZW5kZWxpYW4gcmFuZG9taXphdGlvbiwgQnJpc3RvbCBNZWRpY2FsIFNjaG9vbCBzaG9ydCBjb3Vyc2UKKiBNZW5kZWxpYW4gcmFuZG9taXphdGlvbiBjb25mZXJlbmNlIE1SIGNvdXJzZSwgY29uZmVyZW5jZSB3b3Jrc2hvcAoqIEludHJvZHVjdGlvbiB0byBSLCBCcmlzdG9sIE1lZGljYWwgU2Nob29sIHNob3J0IGNvdXJzZQoqIEludHJvZHVjdGlvbiB0byBkYXRhIHZpc3VhbGlzYXRpb24gYW5kIHdlYiBhcHBsaWNhdGlvbnMgdXNpbmcgUiwgQnJpc3RvbCBNZWRpY2FsIFNjaG9vbCBzaG9ydCBjb3Vyc2UKKiBBIG9uZSB3ZWVrIGNvdXJzZSBhdCB0aGUgVW5pdmVyc2l0eSBvZiBQYXZpYSBXaXRoIEthaXRsaW46IENhdXNhbCBJbmZlcmVuY2UgYW5kIE1lbmRlbGlhbiByYW5kb21pemF0aW9uLCBEZXBhcnRtZW50IG9mIEJyYWluIGFuZCBCZWhhdmlvdXJhbCBTY2llbmNlcywgVW5pdmVyc2l0eSBvZiBQYXZpYSwgSXRhbHkKCiMjIyBTdW1tYXJ5IC8gZnVydGhlciBjb21tZW50cwpXZSBhcmUgaG9waW5nIHRvIGdldCBmdW5kaW5nIGZvciBtZSB0byBkbyBhIHBsYWNlbWVudCB3aXRoIFJ1dGggTG9vcyBhdCBNb3VudCBTaW5haSwgTmV3IFlvcmsgdG8gd29yayBvbiBhIGJvZHkgZmF0IGdlbmV0aWNzIHByb2plY3QgLSB0aGlzIGZ1bmRpbmcgd2lsbCBjb3ZlciBhbiBleHRlbnNpb24gdG8gbXkgUGhELgoKCiMjIFBsYW5uaW5nIGFoZWFkCiMjIyBSZXNlYXJjaCBvYmplY3RpdmVzCk92ZXIgdGhlIG5leHQgeWVhciBteSBtYWluIG9iamVjdGl2ZXMgYXJlOgoKMS4gR2V0IGdseWNvc3VyaWEgR1dBUyBwYXBlciBwdWJsaXNoZWQKMi4gRmluaXNoIHN5c3RlbWF0aWMgcmV2aWV3CjMuIEZpbmlzaCBjaGFwdGVycyAxLTYgZW50aXJlbHkgaW5jbHVkaW5nIGFsbCB3cml0aW5nIGFuYWx5c2lzIGFuZCBhbnkgbWFudXNjcmlwdHMgZnJvbSB0aGlzIHdvcmsKNC4gQ29tcGxldGUgb25lIGNsdXN0ZXJpbmcgYW5hbHlzaXMgYW5kIGJlZ2luIHdvcmsgb24gYSBzZWNvbmQgYW5kIHRoaXJkIChjaGFwdGVycyA3IGFuZCA4KQoKSW4gdGhlIGZpbmFsIDYgbW9udGhzOgoKMS4gRmluaXNoIGNoYXB0ZXJzIDcgYW5kIDggCjIuIEZpbmlzaCBjaGFwdGVyIDkKMy4gRmluaXNoIGNoYXB0ZXIgMTAKNC4gU3VibWl0CgoKIyMjIFRyYWluaW5nCkkgYW0gYm9va2VkIG9udG8gdGhlIFByZWRpY3Rpb24gc2hvcnQgY291cnNlIGF0IEJyaXN0b2wuIEkgaG9wZSB0byBkbyBhIHBsYWNlbWVudCBhdCBNb3VudCBTaW5haSB3aXRoIFJ1dGggTG9vcwoKIyMjIENvbW11bmljYXRpbmcgcmVzZXJhY2gKCkkgcGxhbiBvbiBoYXZpbmcgdGhlIGZvbGxvd2luZyBvdXRwdXRzIGZyb20gdGhlIGNvbWluZyAxMiBtb250aHM6CgoqIFN5c3RlbWF0aWMgcmV2aWV3IC0gcHVibGljYXRpb24KKiBNUiBWaXMgLSBSIHBhY2thZ2UsIHdlYiBhcHBsaWNhdGlvbiwgcHVibGljYXRpb24KKiBtZXRhYm9saXRlIE1SIHdvcmsgLSBwb3N0ZXIvcHJlc2VudGF0aW9uIGF0IE1ldGFib2xvbWljcyAyMDIwIGFuZCBJR0VTIDIwMjAKKiBpZiB0aGUgcGxhY2VtZW50IGdvZXMgYWhlYWQgUnV0aCBoYXMgc3VnZ2VzdGVkIHRoaXMgd291bGQgcHJvYmFibHkgbGVhZCB0byBhIHBhcGVyCiogSUdFUyAyMDIwIC0gMS0zIEp1bHkgMjAyMCwgU2V1bCwgU291dGggS29yZWEgKGFic3RyYWN0cyBGZWJydWFyeSAzcmQpCiogTWV0YWJvbG9taWNzIDIwMjAgLSA2LTEwIEp1bHkgMjAyMCwgU2hhbmdoYWksIENoaW5hCgojIyBGdXJ0aGVyIGNvbW1lbnRzCk5vIGZ1cnRoZXIgY29tbWVudHMKCl9fXwoKXG5ld3BhZ2UgIAoKIyBSZXBvcnQgeyNyZXBvcnR9CiMjIFRpdGxlIHBhZ2UKCioqQ3VycmVudCBkYXRlKio6IDI2LzEyLzIwMTkKCioqQXV0aG9yKio6IE1hdHRoZXcgTGVlCgoqKlN1cGVydmlzb3JzKio6CgoqIE5pYyBUaW1wc29uCiogS2FpdGxpbiBXYWRlCiogTGF1cmEgQ29yYmluCgoqKlRpdGxlKio6IFdoYXQgbGllcyBiZWhpbmQgdGhlIGNhdXNhbCBpbXBhY3Qgb2YgYm9keSBtYXNzIGluZGV4IChCTUkpIGxldmVsIGFuZCBjaGFuZ2Ugb24gaHVtYW4gaGVhbHRoPyBBZGRlZCB2YWx1ZSBmcm9tIGNvbXBsZW1lbnRhcnkgc3R1ZHkgZGVzaWduIGFuZCBkZWVwIG1ldGFib2xvbWljIHBoZW5vdHlwaW5nKgoKKipEYXRlIG9mIGNvbW1lbmNlbWVudCoqOiAwMS8xMC8yMDE3CgoqKkV4cGVjdGVkIHN1Ym1pc3Npb24qKjogMDEvMTAvMjAyMQoKXG5ld3BhZ2UKCiMjIE1haW4gcmVwb3J0CiMjIyBPdmVydmlldyBvZiBQaEQKSSBhbSBvbiBhIDMuNS15ZWFyIEdXNCBCaW9NZWQgTVJDIERUUCBQaEQuIEkgYW0gaW4gbXkgdGhpcmQgeWVhciBhbmQgZXhwZWN0IHRvIGZpbmlzaCBBcHJpbCAyMDIxLiBUaGUgW3llYXIgMSByZXBvcnRdKGh0dHBzOi8vZ2l0aHViLmNvbS9tYXR0bGVlODIxLzAwMF90aGVzaXMvYmxvYi9tYXN0ZXIvcmV2aWV3cy95ZWFyMS9hbm51YWxfcmV2aWV3LmRvY3gpIGFuZCBbcHJlc2VudGF0aW9uXShodHRwczovL2dpdGh1Yi5jb20vbWF0dGxlZTgyMS8wMDBfdGhlc2lzL2Jsb2IvbWFzdGVyL3Jldmlld3MveWVhcjEvYW5udWFsX3Jldmlldy5wZGYpIGNhbiBiZSBkb3dubG9hZGVkIGZyb20gW0dpdEh1Yl0oaHR0cHM6Ly9naXRodWIuY29tL21hdHRsZWU4MjEvMDAwX3RoZXNpcy9ibG9iL21hc3Rlci9yZXZpZXdzL3llYXIxKS4KCiMjIyMgUmF0aW9uYWxlClRoZSBudW1iZXIgb2YgaW5kaXZpZHVhbHMgc3VmZmVyaW5nIGZyb20gb3ZlcndlaWdodCBhbmQgb2Jlc2l0eSBpcyBhdCBhbiBhbGwgdGltZSBoaWdoLiBHbG9iYWxseSwgMzklIGFuZCAxMyUgb2YgYWR1bHRzICgxOCspIGFyZSBlc3RpbWF0ZWQgdG8gYmUgb3ZlcndlaWdodCBvciBvYmVzZVtAV29ybGRIZWFsdGhPcmdhbmlzYXRpb24yMDE4XShGaWd1cmUgXEByZWYoZmlnOm92ZXJ3ZWlnaHQtZ3JhcGgpIGFuZCBcQHJlZihmaWc6b2Jlc2l0eS1ncmFwaCkpIGFuZCB0aGlzIG51bWJlciBpcyBleHBlY3RlZCB0byBjb250aW51ZSB0byByaXNlW0BOZzIwMTQ7IEBOQ0QtUmlzQzIwMTY7IEBBYmFyY2EtR29tZXoyMDE3XS4gSXQgaXMgZXN0aW1hdGVkIHRoYXQgb2Jlc2l0eSBpcyByZXBzb25zaWJsZSBmb3IgOCUgb2YgZ2xvYmFsIGRlYXRoc1tAU3RhbmF3YXkyMDE4XShGaWd1cmUgXEByZWYoZmlnOm1vcnRhbGl0eS1ncmFwaCkpLiBXaXRoIHRoZSBudW1iZXIgb2Ygb3ZlcndlaWdodCBhbmQgb2Jlc2UgaW5kaXZpZHVhbHMgaW5jcmVhc2luZ1tATmcyMDE0OyBATkNELVJpc0MyMDE2OyBAQWJhcmNhLUdvbWV6MjAxN10gaXQgaXMgbGlrZWx5IHRoZSBudW1iZXIgb2YgcHJlbWF0dXJlIGRlYXRocyB3aWxsIHJpc2UgdG9vLiA8YnI+CgpgYGB7ciBvdmVyd2VpZ2h0LWdyYXBoLCBlY2hvPUZBTFNFLCBvdXQud2lkdGg9JzEwMCUnLCBmaWcuY2FwPSJQcm9wb3J0aW9uIG9mIG92ZXJ3ZWlnaHQgaW5kaXZpZHVhbHMifQprbml0cjo6aW5jbHVkZV9ncmFwaGljcygiLi4vLi4vaW5kZXgvZGF0YS9jaGFwdGVyMS9zaGFyZS1vZi1hZHVsdHMtd2hvLWFyZS1vdmVyd2VpZ2h0LnBuZyIpCmBgYApcbm9pbmRlbnQgCipGaWd1cmUgXEByZWYoZmlnOm92ZXJ3ZWlnaHQtZ3JhcGgpLCByZXByb2R1Y2VkIGZyb20gUml0Y2hpZSBhbmQgUm9zZXIgKDIwMTkpW0BSaXRjaGllMjAxOV0sIHNob3dzIHRoZSBzaGFyZSBvZiBhZHVsdHMgKDE4KykgdGhhdCBhcmUgb3ZlcndlaWdodCBnbG9iYWxseSBhbmQgaW4gNSBzZWxlY3RlZCBnZW9ncmFwaGljIHJlZ2lvbnMgKEFtZXJpY2FzLCBFdXJvcGUsIEVhc3Rlcm4gTWVkaXRlcmFuZWFuLCBBZnJpY2EgYW5kIFNvdXQgRWFzdCBBc2lhKSBmcm9tIDE5NzUgdG8gMjAxNi4qIDxicj4KCmBgYHtyIG9iZXNpdHktZ3JhcGgsIGVjaG89RkFMU0UsIG91dC53aWR0aD0nMTAwJScsIGZpZy5jYXA9IlByb3BvcnRpb24gb2Ygb2Jlc2UgaW5kaXZpZHVhbHMifQprbml0cjo6aW5jbHVkZV9ncmFwaGljcygiLi4vLi4vaW5kZXgvZGF0YS9jaGFwdGVyMS9zaGFyZS1vZi1hZHVsdHMtZGVmaW5lZC1hcy1vYmVzZS5wbmciKQpgYGAKXG5vaW5kZW50IAoqRmlndXJlIFxAcmVmKGZpZzpvYmVzaXR5LWdyYXBoKSwgcmVwcm9kdWNlZCBmcm9tIFJpdGNoaWUgYW5kIFJvc2VyICgyMDE5KVtAUml0Y2hpZTIwMTldLCBzaG93cyB0aGUgc2hhcmUgb2YgYWR1bHRzICgxOCspIHRoYXQgYXJlIG9iZXNlIGdsb2JhbGx5IGFuZCBpbiA1IHNlbGVjdGVkIGdlb2dyYXBoaWMgcmVnaW9ucyAoQW1lcmljYXMsIEV1cm9wZSwgRWFzdGVybiBNZWRpdGVyYW5lYW4sIEFmcmljYSBhbmQgU291dCBFYXN0IEFzaWEpIGZyb20gMTk3NSB0byAyMDE2LiogPGJyPgoKYGBge3IgbW9ydGFsaXR5LWdyYXBoLCBlY2hvPUZBTFNFLCBvdXQud2lkdGg9JzEwMCUnLCBmaWcuY2FwPSJOdW1iZXIgb2YgZGVhdGhzIGJ5IHJpc2sgZmFjdG9yIn0Ka25pdHI6OmluY2x1ZGVfZ3JhcGhpY3MoIi4uLy4uL2luZGV4L2RhdGEvY2hhcHRlcjEvbnVtYmVyLW9mLWRlYXRocy1ieS1yaXNrLWZhY3Rvci5wbmciKQpgYGAKXG5vaW5kZW50IAoqRmlndXJlIFxAcmVmKGZpZzptb3J0YWxpdHktZ3JhcGgpLCByZXByb2R1Y2VkIGZyb20gUml0Y2hpZSBhbmQgUm9zZXIgKDIwMTkpW0BSaXRjaGllMjAxOV0sIHNob3dzIHRoZSBudW1iZXIgb2YgZGVhdGhzIGZvciAyNiByaXNrIGZhY3RvcnMgZ2xvYmFsbHkgaW4gMjAxNyBmb3IgYWxsIGFnZSBncm91cHMuIE9iZXNpdHkgaXMgdGhlIDV0aCBsZWFkaW5nIGNhdXNlIG9mIGRlYXRoIHdpdGggMy40MSBtaWxsaW9uIGRlYXRocyBpbiAyMDE3LiogPGJyPgoKQ29udmVudGlvbmFsbHksIG92ZXJ3ZWlnaHQgYW5kIG9iZXNpdHkgaXMgbWVhc3VyZWQgdXNpbmcgYm9keSBtYXNzIGluZGV4IChCTUkpLCB3aXRoIG92ZXJ3ZWlnaHQgYW5kIG9iZXNpdHkgY2xhc3NpZmllZCBhcyBhIEJNSSBvZiAyNS0tMjkuOSBrZy9tXjJeIGFuZCA+IDMwIGtnL21eMl4gcmVzcGVjdGl2ZWx5LiBBIG5vcm1hbCB3ZWlnaHQgY2xhc3NpZmljYXRpb24gaXMgYSBCTUkgb2YgMTguNS0tMjQuOSBrZy9tXjJeLCB3aXRoIGFuIHVuZGVyd2VpZ2h0IGNsYXNzIGJlbG93IHRoaXMuIEluIHRoZSBjcnVkZXN0IHNlbnNlLCBCTUkgaXMgYSBtZWFzdXJlIG9mIHdlaWdodCBnaXZlbiBhbiBhZGp1c3RtZW50IG9mIGhlaWdodC4gQk1JIGlzIGFzc29jaWF0ZWQgd2l0aCBudW1lcm91cyBkaXNlYXNlcyBhbmQgcHJvdmlkZXMgYW4gYWNjdXJhdGUgbWVhc3VyZSBvZiByaXNrIGF0IGEgcG9wdWxhdGlvbiBsZXZlbCBmb3IgbWFueS4gSG93ZXZlciwgQk1JIGRvZXMgbm90IGhhdmUgdGhlIHJlc29sdXRpb24gdG8gYWNjdXJhdGVseSBtZWFzdXJlIGFuIGluZGl2aWR1YWzigJlzIGJvZHkgY29tcG9zaXRpb25bQFBpc2Nob24yMDA4OyBAUm9tZXJvLUNvcnJhbDIwMDg7IEBPa29yb2R1ZHUyMDEwOyBAUGFzY28yMDEyXSBpLmUuIHRoZSBhbW91bnQgYW5kIGxvY2F0aW9uIG9mIGFkaXBvc2UgdGlzc3VlIHdpdGhpbiB0aGUgYm9keSAtIHN0dWRpZXMgaGF2ZSBwb2ludGVkIHRvIGEgbW9yZSBpbXBvcnRhbnQgcm9sZSBmb3IgZmF0IGRlcG9zaXRpb24gaW4gZGlzZWFzZSBkZXZlbG9wbWVudFtAU2FoYWt5YW4yMDE1OyBASGFtZXIyMDE3XS4gQXMgc3VjaCwgY29tcGxpbWVudGFyeSBhc3Nlc21lbnQgb2YgaW5jcmVhc2VkIGFkaXBvc2l0eSB1c2luZyBhIGNvbWJpbmF0aW9uIG9mIGJvZHkgY29tcG9zaXRpb24gbWVhc3VyZXMgKGkuZS4gQk1JLCB3YWlzdCBoaXAgcmF0aW8sIGJvZHkgZmF0ICUpIG1heSBwcm92aWRlIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gaW50byBhc3NvY2lhdGlvbnMgd2l0aCBkaXNlYXNlW0BXb3JsZEhlYWx0aE9yZ2FuaXNhdGlvbjIwMDg7IEBDb2xsYWJvcmF0aW9uMjAwOV0uIDxicj4gCgpBZGlwb3NlIHRpc3N1ZXMgYXJlIHByb2xpZmljIHNpZ25hbGxlcnMgdG8gc3Vycm91bmRpbmcgYW5kIHN5c3RlbWljIHRpc3N1ZXNbQExlaHIyMDEyOyBARmFzc2hhdWVyMjAxNV0gbGVhZGluZyB0byBsYXJnZSBkb3duc3RyZWFtIGVmZmVjdHMgd2l0aCBwb3RlbnRpYWxseSBoYXJtZnVsIGNvbnNlcXVlbmNlc1tAQmx1aGVyMjAxMzsgQEJsdWhlcjIwMTU7IEBGYXNzaGF1ZXIyMDE1OyBATHVvMjAxNl0uIENoYW5nZXMgdG8gYWRpcG9zZSB0aXNzdWUgYWJ1bmRhbmNlIGlzIHJlZmxlY3RlZCBpbiBhZGlwb2N5dGUgc2lnbmFsbGluZy4gVGhpcyBjaGFuZ2UgaXMgY29uY3VycmVudCB3aXRoIHNoaWZ0cyBpbiBtZXRhYm9saWMgcHJvZmlsZXMsIHdoZXJlIGFsdGVyYXRpb25zIHRvIHRoZSBsZXZlbCBvZiBvbmUgbWV0YWJvbGl0ZSBkb2VzIG5vdCBvY2N1ciBpbiBpc29sYXRpb24uIE1ldGFib2xpdGVzIHNpdCBhdCB0aGUgaW50ZXJmYWNlIGJldHdlZW4gZ2VuZXRpYyBhbmQgbm9uLWdlbmV0aWMgZmFjdG9ycywgcHJvdmlkZSBhIHVzZWZ1bCByZWFkLW91dCBvZiBwaHlzaW9sb2dpY2FsIGZ1bmN0aW9uLCBhbmQgaGF2ZSBiZWVuIGdlbmV0aWNhbGx5IHdlbGwgY2hhcmFjdGVyaXNlZFtAU2hpbjIwMTQ7IEBLZXR0dW5lbjIwMTZdLgoKIyMjIyBBaW1zIHsjYWltc30KVGhlIGJpb2xvZ2ljYWwgcGF0aHdheSBmcm9tIGluY3JlYXNlZCBhZGlwb3NpdHkgdG8gZGlzZWFzZXMgZGV2ZWxvcG1lbnQgaXMgdW5jbGVhci4gQWRpcG9zZSB0aXNzdWUgaXMgYSBwcm9saWZpYyBzaWduYWxsaW5nIG9yZ2FuIHJlc3VsdGluZyBpbiBzeXN0ZW1pYyBjaGFuZ2VzIGFjcm9zcyB0aGUgYm9keS4gTWV0YWJvbGljIGNoYW5nZXMgbWF5IGJlIGEgcmVzdWx0IG9mIGluY3JlYXNlZCBhZGlwb3NpdHkgYW5kIHN1YnNlcXVlbnQgc2lnbmFsbGluZyBhbmQgZXZpZGVuY2UgaGFzIGhpZ2hsaXRlZCB0aGUgcm9sZSBvZiBtZXRhYm9saXRlcyBpbiBkaXNlYXNlLiBUaGUgYWltIG9mIHRoaXMgdGhlc2lzIGlzIHRvOiA8YnI+CgoqICoqSWRlbnRpZnkgbWV0YWJvbGl0ZXMgdGhhdCBzaXQgb24gdGhlIGNhdXNhbCBwYXRod2F5IGZyb20gaW5jcmVhc2VkIGFkaXBvc2l0eSB0byBkaXNlYXNlKioKCiMjIyMgT2JqZWN0aXZlcyB7I29iamVjdGl2ZXN9CkluIG9yZGVyIHRvIGFjaGlldmUgdGhpcyBhaW0gYW5kIGJldHRlciB1bmRlcnN0YW5kIHRoZSBiaW9sb2dpY2FsIG1lY2hhbmlzbXMgdW5kZXJseWluZyBkaXNlYXNlIGRldmVsb3BtZW50IHRoaXMgdGhlc2lzIHdpbGw6CgoxLiBJZGVudGlmeSBhbGwgdHJhaXRzIGNhdXNhbGx5IGFzc29jaWF0ZWQgd2l0aCBpbmNyZWFzZWQgYWRpcG9zaXR5CiAgICAqIHdlIHdpbGwgcGVyZm9ybSBhIHN5c3RlbWF0aWMgcmV2aWV3IG9mIGFsbE1lbmRlcmxpbiByYW5kb21pemF0aW9uIHN0dWRpZXMgaW52ZXN0aWdhdGluZyBtZWFzdXJlcyBvZiBpbmNyZWFzZWQgYWRpcG9zaXR5IHdpdGggYW55IG91dGNvbWUKICAgICogd2Ugd2lsbCB1c2UgdGhlIGZpbmRpbmdzIGZyb20gdGhpcyByZXZpZXcgdG8gZ3VpZGUgc3Vic2VxdWVudCB3b3JrIDxicj4gCgpccGFyCgoyLiBJZGVudGlmeSBhbmQgZGVzY3JpYmUgYXBwcm9wcmlhdGUgaW5zdHJ1bWVudGF0aW9uIG9mIGluY3JlYXNlZCBhZGlwb3NpdHkgPGJyPgoKXHBhcgoKMy4gSWRlbnRpZnkgbWV0YWJvbGl0ZXMgYXNzb2NpYXRlZCB3aXRoIGluY3JlYXNlZCBhZGlwb3NpdHkKICAgICogV2Ugd2lsbCB1c2Ugb2JzZXJ2YXRpb25hbCBhbmQgTWVuZGVsaWFuIHJhbmRvbWl6YXRpb24gYW5hbHlzZXMgdG8gaWRlbnRpZnkgbWV0YWJvbGl0ZXMgYXNzb2NpYXRlZCB3aXRoIG11bHRpcGxlIG1lYXN1cmVzIG9mIGluY3JlYXNlZCBhZGlwb3NpdHkgPGJyPgoKXHBhcgoKNC4gRGVzaWduIGFuZCBpbXBsZW1lbnQgbWV0aG9kcyB0byBjbHVzdGVyIG1ldGFib2xpdGVzCiAgICAqIE1ldGFib2xpdGVzIGFyZSBjb21wbGljYXRlZCBhbmQgaGlnaGx5IGNvcnJlbGF0ZWQ7IHdlIHdpbGwgZGV2ZWxvcCBtZXRob2RzIHRvIGNsdXN0ZXIgbWV0YWJvbGl0ZXMgYW5kIHByb3Bvc2UgcnVsZXMgZm9yIGluc3RydW1lbnRpbmcgbWV0YWJvbGl0ZXMgYW5kIGNsdXN0ZXJzIGZvciBNZW5kZWxpYW4gcmFuZG9taXphdGlvbiBhbmFseXNlcyA8YnI+CgpccGFyCgo1LiBJZGVudGlmeSBkaXNlYXNlcyBhc3NvY2lhdGVkIHdpdGggbWV0YWJvbGl0ZXMKICAgICogV2Ugd2lsbCB1c2Ugb2JzZXJ2YXRpb25hbCBhbmQgTWVuZGVsaWFuIHJhbmRvbWl6YXRpb24gYW5hbHlzZXMgdG8gaWRlbnRpZnkgbWV0YWJvbGl0ZXMgYXNzb2NpYXRlZCB3aXRoIGRpc2Vhc2VzCiAgICAqIFdlIHdpbGwgYmUgZ3VpZGVkIGJ5IHRoZSBzeXN0ZW1hdGljIHJldmlldyBhbmQgbWV0YWJvbGl0ZXMgd2UgaWRlbnRpZnkgYXMgYXNzb2NpYXRlZCB3aXRoIGluY3JlYXNlZCBhZGlwb3NpdHkgPGJyPgoKXHBhcgoKIyMjIyBMYXlvdXQKYGBge3IgY2hhcHRlci1vdmVydmlldywgZWNobz1GQUxTRSwgb3V0LndpZHRoPScxMDAlJywgZmlnLmNhcD0iT3ZlcnZpZXcgb2YgUGhEIGNoYXB0ZXJzIn0Ka25pdHI6OmluY2x1ZGVfZ3JhcGhpY3MoIi4uLy4uL2luZGV4L2RhdGEvdGhlc2lzX291dGxpbmUtUGFnZS0yLnN2ZyIpCmBgYAoqRmlndXJlIFxAcmVmKGZpZzpjaGFwdGVyLW92ZXJ2aWV3KSBzaG93cyBhbiBvdmVydmlldyBvZiBwcm9wb3NlZCBjaGFwdGVycyBmb3IgdGhlIHRoZXNpcywgaW5jbHVkaW5nIHByb2dyZXNzIHRvIGRhdGUgYW5kIGV4cGVjdGVkIG91dGNvbWVzLCBpbiBvcmRlciB0byBhY2hpZXZlIHRoZSBkZXNjcmliZWQgYWltIGFuZCBvYmplY3RpdmVzLiBUbyBlbmxhcmdlOiByaWdodCBjbGljayAtPiBvcGVuIGltYWdlIGluIG5ldyB0YWIqCgoKCiMjIyBDaGFwdGVyIHByb2dyZXNzClRoZSB0aGVzaXMgaXMgbGFpZCBvdXQgYXMgYSBwaXBlbGluZSBjaGVja2xpc3Qgb2Ygd2hhdCB0byBkbyB3aGVuIHJlc2VhcmNoZXJzIHdhbnQgdG8gdW5kZXJzdGFuZCB0aGUgY2F1c2FsIGFzc29jaWF0aW9ucyBiZXR3ZWVuIGV4cG9zdXJlcyBhbmQgb3V0Y29tZXMgdXNpbmcgbWV0YWJvbGl0ZXMgYXMgaW50ZXJtZWRpYXRlcy4gQ2hhcHRlciAxIGludHJvZHVjZXMgdGhlIGNvbnRleHQgb2YgdGhlIHRoZXNpcyBhbmQgd2hhdCB3ZSBjdXJyZW50bHkga25vdyBhYm91dCBpbmNyZWFzZWQgYWRpcG9zaXR5IGFuZCBkaXNlYXNlcy4gVGhlIHBpcGVsaW5lIHN0YXJ0cyB3aXRoIGNoYXB0ZXIgMiwgaWRlbnRpZmljYXRpb24gb2YgY2F1c2FsbHkgYXNzb2NpYXRlZCBkaXNlYXNlcywgYW5kIHByb2dyZXNzZXMgdGhyb3VnaCBjaG9vc2luZyBpbnN0cnVtZW50cyBmb3IgZXhwb3N1cmVzLCBwZXJmb3JtaW5nIG9ic2VydmF0aW9uYWwgYW5hbHlzaXMgYW5kIHRoZSBmaXJzdCBzdGVwIG9mIGFuIE1SLCB2aXN1bGFpc2luZyB0aGUgcmV1c2x0cyBvZiBNUiB3b3JrIG9uIGEgbGFyZ2Ugc2NhbGUsIGluc3RydW1lbnRpbmcgbWV0YWJvbGl0ZXMgYXMgaW50ZXJtZWRpYXRlcyBhbmQgcGVyZm9ybWluZyB0aGUgZmluYWwgTVIgc3RhZ2Ugb2YgaW50ZXJtZWRpYXRlIHRvIGRpc2Vhc2UuIFRoZSBiZWxvdyBHYW50dCBjaGFydCBsYXlzIG91dCB0aGUgcGxhbiBmb3IgY2hhcHRlciBwcm9ncmVzcyBpbiB0aGUgY29taW5nIDEyIG1vbnRocyAoaG92ZXIgb3ZlciBhIHNlY3Rpb24gdG8gcmV2ZWFsIHRoZSBuYW1lKToKCmBgYHtyIGVjaG89RkFMU0UsIGVycm9yPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCBvdXQud2lkdGg9IjEwMCUifQojIGxpYnJhcnkoZGV2dG9vbHMpCiMgZGV2dG9vbHM6Omluc3RhbGxfZ2l0aHViKCJkYWF0dGFsaS90aW1ldmlzIikKbGlicmFyeSh0aW1ldmlzKQoKZGF0YSA8LSBkYXRhLmZyYW1lKGlkID0gMToxMSwKICAgICAgICAgICAgICAgICAgICAgY29udGVudCA9IGMoIkludHJvZHVjdGlvbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJTeXN0ZW1hdGljIHJldmlldyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJJbnN0cnVtZW50YXRpb24gZm9yIG9ic2VydmF0aW9uYWwgYW5kIE1SIGFuYWx5c2VzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk9ic2VydmF0aW9uYWwgYW5hbHlzaXMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTVI6IGFkaXBvc2l0eSAtPiBtZXRhYm9saXRlcyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJNUiBWaXoiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQ2x1c3RlcmluZyBtZXRhYm9saXRlcyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJJbnN0cnVtZW50aW5nIG1ldGFib2xpdGVzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk1SOiBtZXRhYm9saXRlcyAtPiBkaXNlYXNlcyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJEaXNjdXNzaW9uL2NvbmNsdXNpb24iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVGhlc2lzIHN1Ym1pc3Npb24iKSwKICAgICAgICAgICAgICAgICAgICAgIHRpdGxlID0gYygiSW50cm9kdWN0aW9uIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlN5c3RlbWF0aWMgcmV2aWV3IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkluc3RydW1lbnRhdGlvbiBmb3Igb2JzZXJ2YXRpb25hbCBhbmQgTVIgYW5hbHlzZXMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiT2JzZXJ2YXRpb25hbCBhbmFseXNpcyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJNUjogYWRpcG9zaXR5IC0+IG1ldGFib2xpdGVzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk1SIFZpeiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJDbHVzdGVyaW5nIG1ldGFib2xpdGVzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkluc3RydW1lbnRpbmcgbWV0YWJvbGl0ZXMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTVI6IG1ldGFib2xpdGVzIC0+IGRpc2Vhc2VzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkRpc2N1c3Npb24vY29uY2x1c2lvbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlRoZXNpcyBzdWJtaXNzaW9uIiksCiAgICAgICAgICAgICAgICAgICAgIHN0YXJ0ID0gYygiMjAyMC0wMS0wMSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMjAyMC0wMS0wMSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMjAyMC0wMi0wMSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMjAyMC0wNC0wMSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMjAyMC0wMS0wMSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMjAyMC0wMS0wMSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMjAyMC0wNS0wMSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMjAyMC0wNy0wMSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMjAyMC0wOS0wMSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMjAyMC0xMi0wMSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMjAyMS0wMS0zMSIpLAogICAgICAgICAgICAgICAgICAgICBlbmQgPSBjKCIyMDIwLTAzLTAxIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMjAyMC0wNC0wMSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIwMjAtMDUtMDEiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyMDIwLTA2LTAxIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMjAyMC0wNS0wMSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIwMjAtMDMtMDEiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyMDIwLTEwLTAxIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMjAyMC0xMi0wMSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIwMjEtMDEtMDEiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyMDIxLTAyLTAxIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMjAyMS0wNC0zMSIpLAogICAgICAgICAgICAgICAgICAgZ3JvdXAgPSBjKCJDaGFwdGVyIDEiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkNoYXB0ZXIgMiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQ2hhcHRlciAzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJDaGFwdGVyIDQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkNoYXB0ZXIgNSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQ2hhcHRlciA2IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJDaGFwdGVyIDciLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkNoYXB0ZXIgOCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQ2hhcHRlciA5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJDaGFwdGVyIDEwIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVGhlc2lzIikKKQoKZ3JvdXBzIDwtIGRhdGEuZnJhbWUoaWQgPSBkYXRhJGdyb3VwLAogICAgICAgICAgICAgICAgICAgICBjb250ZW50ID0gZGF0YSRncm91cCkKCnRpbWV2aXMoZGF0YSA9IGRhdGEsIGdyb3VwcyA9IGdyb3VwcywKICAgICAgICBzaG93Wm9vbSA9IEZBTFNFLAogICAgICAgIGZpdCA9IFRSVUUpCmBgYAoKXCAgCgpcICAKCiMjIyMgQ2hhcHRlciAxOiBJbnRyb2R1Y3Rpb24KIyMjIyMgT3ZlcnZpZXcKVGhpcyBjaGFwdGVyIHByb3ZpZGVzIHRoZSBjb250ZXh0IG9mIHRoZSB0aGVzaXMsIGkuZS4gd2hhdCBkaXNlYXNlcyBpbmNyZWFzZWQgYWRpcG9zaXR5IGlzIGFzc29jaWF0ZWQgd2l0aC4gSXQgcHJvdmlkZXMgYmFja2dyb3VuZCBvbiBhZGlwb3NlIHRpc3N1ZSBhbmQgdGhlIHByb2R1Y3RzIG9mIGFkaXBvc2UgdGlzc3VlIHN1Y2ggYXMgbWV0YWJvbGl0ZXMuIEl0IGdpdmVzIGFuIG92ZXJ2aWV3IG9mIG9ic2VydmF0aW9uYWwgcmVzZWFyY2ggbG9va2luZyBhdCBkaXNlYXNlcyBhc3NvY2lhdGVkIHdpdGggaW5jcmVhc2VkIGFkaXBvc2l0eS4gSXQgZ29lcyBvbiB0byBleHBsb3JlIHdoYXQgbWV0YWJvbGl0ZXMgbWlnaHQgcHJvdmlkZSBpbiB1bmRlcnN0YW5kaW5nIHRoZXNlIGFzc29jaWF0aW9ucyBhbmQgaG93IE1SIG1heSBoZWxwIGludmVzdGlhZ3RlIHRoZXNlIGFzc29jaWF0aW9ucy4gVGhpcyBjaGFwdGVyIGluY2x1ZGVzIHRoZSBbYWltc10oI2FpbXMpIGFuZCBbb2JqZWN0aXZlc10oI29iamVjdGl2ZXMpIG9mIHRoZSB0aGVzaXMgd2hpY2ggYXJlIGRlc2NyaWJlZCBhYm92ZS4KCiMjIyMjIFByb2dyZXNzClRoZSBjaGFwdGVyIGlzIGhhbGYgZmluaXNoZWQuIEFuIHVub2Zvcm1hdHRlZCBkcmFmdCBjYW4gYmUgdmlld2VkIG9uIFtHaXRIdWJdKGh0dHBzOi8vaHRtbHByZXZpZXcuZ2l0aHViLmlvLz9odHRwczovL2dpdGh1Yi5jb20vbWF0dGxlZTgyMS8wMDBfdGhlc2lzL2Jsb2IvbWFzdGVyL2luZGV4L19ib29rL2NoYXB0ZXIxLmh0bWwpLgoKCgpcICAKCiMjIyMgQ2hhcHRlciAyOiBTeXN0ZW1hdGljIHJldmlldwojIyMjIyBPdmVydmlldwpDaGFwdGVyIDEgc2hvd3MgdGhhdCB0aGUgbGl0ZXJhdHVyZSBpcyBjbGVhciB0aGF0IG51bWVyb3VzIGRpc2Vhc2VzIGFyZSBhc3NvY2lhdGVkIHdpdGggaW5jcmVhc2VkIGFkaXBvc2l0eS4gSG93ZXZlciB0aGUgY2F1c2FsIGFzc29jaWF0aW9ucyBiZXR3ZWVuIGluY3JlYXNlZCBhZGlwb3NpdHkgaXMgbm90IGFzIGNsZWFyLiBBcyBNUiBoYXMgYmVlbiBpbmNyZWFzaW5nbHkgdXNlZCBvdmVyIHRoZSB5ZWFycyBhbmQgbW9yZSBkYXRhc2V0cyBoYXZlIGJlY29tZSBhdmFpbGFibGUgYSBsYXJnZSBib2R5IG9mIGV2aWRlbmNlIGhhcyBidWlsdCB1cCBmb3IgY2F1c2FsIGFzc29jaWF0aW9ucyBiZXR3ZWVuIGluY3JlYXNlZCBhZGlwb3NpdHkgYW5kIGEgbnVtYmVyIG9mIGRpc2Vhc2VzLiBDaGFwdGVyIDIgc2V0cyBvdXQgdG8gc3ludGhlc2lzZSBhbGwgb2YgdGhpcyBldmlkZW5jZSBhbmQgaWRlbnRpZnkgdGhlIGRpc2Vhc2VzIGNhdXNhbGx5IGFzc29jaWF0ZWQgd2l0aCBpbmNyZWFzZWQgYWRpcG9zaXR5LiBUaGVzZSBkaXNlYXNlcyB3aWxsIGJlIHVzZWQgaW4gdGhlIHNlY29uZCBzdGVwIG9mIHRoZSBNUiB0byBpZGVudGlmeSB3aGV0aGVyIG1ldGFib2xpdGVzIGFyZSBhc3NvY2lhdGVkIHdpdGggdGhlIGRpc2Vhc2VzLiBUaGUgc3lzdGVtYXRpYyByZXZpZXcgd2lsbCBpbmNsdWRlIGEgbWV0YS1hbmFseXNpcywgaG93ZXZlciB0aW1lIGNvbnN0cmFpbnRzIG9mIHRoZSBQaEQgbWF5IG1lYW4gdGhpcyBpcyBub3QgY29tcGxldGVkIHdpdGhpbiB0aGUgdGltZSBmcmFtZS4gCgojIyMjIyBQcm9ncmVzcwp+MTUwIHBhcGVycyB3ZXJlIGlkZW50aWZpZWQgYW5kIGluY2x1ZGVkIGZvciBkYXRhIGV4dHJhY3Rpb24uIERhdGEgZXh0cmFjdGlvbiBpcyBvbi1nb2luZyBhbmQgZXhwZWN0ZWQgdG8gYmUgY29tcGxldGVkIGVuZCBvZiBGZWJydWFyeSB3aXRoIGEgZHJhZnQgbWFudXNjcmlwdC9jaGFwdGVyIGZvciBlbmQgTWFyY2guCgoKXCAgCgojIyMjIENoYXB0ZXIgMzogSW5zdHJ1bWVudGF0aW9uCiMjIyMjIE92ZXJ2aWV3CkJlZm9yZSBzdGFydGluZyBhbiBhbmFseXNpcyBvbmUgbXVzdCBmaXJzdCBpZGVudGlmeSB0aGUgZXhwb3N1cmUuIEluIE1SIGFuYWx5c2lzIGlkZW50aWZ5aW5nIHRoZSBleHBvc3VyZSBpbmNsdWRlcyBkZWNpZGluZyBob3cgdG8gaW5zdHJ1bWVudCB0aGUgZXhwb3N1cmUuIFRyYWRpdGlvbmFsbHkgdGhpcyBoYXMgYmVlbiB0byBzZWxlY3QgaW5kZXBlbmRlbnQgZ2VuZXRpYyB2YXJpYW50cyByZWFjaGluZyBhIGdlbm9tZS13aWRlIHNpZ25pZmljYW5jZSB0aHJlc2hvbGQgKDUgeCAxMF4tOF4pIGZyb20gdGhlIGxhcmdlc3QgYXZhaWxhYmxlIEdXQVMuIEZvciBpbmNyZWFzZWQgYWRpcG9zaXR5IG1lYXN1cmVzLCBlc3BlY2lhbGx5IEJNSSwgdGhlaXIgYXJlIG5vdyBtYW55IEdXQVNzIGF2YWlsYWJsZSBmb3IgcmVzZXJhaGNlcnMgdG8gY2hvb3NlIGZyb20uIENoYXB0ZXIgMyBleHBsb3JlcyBob3cgdG8gaW5zdHJ1bWVudCBpbmNyZWFzZWQgYWRpcG9zaXR5LCBpbmNsdWRpbmcgaW52ZXN0aWdhdGluZyB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlIGV4cG9zdXJlcyBhbmQgdGhlIGRpZmZlcmVudCBHV0FTcyBhdmFpbGFibGUuCgojIyMjIyBQcm9ncmVzcwpUaGlzIHdpbGwgYmUgYSBzaG9ydCBjaGFwdGVyIHdpdGggYSBzbWFsbCBhbW91bnQgb2YgYW5hbHlzaXMgc2hvd2luZyB0aGUgYXBwcm9wcmlhdGVuZXNzIG9mIHRoZSBpbnN0cnVtZW50cyBzZWxlY3RlZCBmb3IgdGhlIE1SIGFuYWx5c2lzLiBTb21lIG9mIHRoZSBhbmFseXNpcyBoYXMgYmVlbiBjb25kdWN0ZWQgYW5kIHNvbWUgb2YgdGhlIGNoYXB0ZXIgaGFzIGJlZW4gd3JpdHRlbi4gQW4gdW5vZm9ybWF0dGVkIGRyYWZ0IGNhbiBiZSB2aWV3ZWQgb24gW0dpdEh1Yl0oaHR0cHM6Ly9odG1scHJldmlldy5naXRodWIuaW8vP2h0dHBzOi8vZ2l0aHViLmNvbS9tYXR0bGVlODIxLzAwMF90aGVzaXMvYmxvYi9tYXN0ZXIvaW5kZXgvX2Jvb2svY2hhcHRlcjMuaHRtbCkuCgoKClwgIAoKIyMjIyBDaGFwdGVyIDQ6IE9ic2VydmF0aW9uYWwgYW5hbHlzaXMKIyMjIyMgT3ZlcnZpZXcKSGF2aW5nIGVzdGFibGlzaGVkIGhvdyB0byBpbnN0cnVtZW50IGluY3JlYXNlZCBhZGlwb3NpdHkgaW4gb2JzZXJ2YXRpb25hbCBhbmQgTVIgYW5hbHN5c2lzIGluIENoYXB0ZXIgMywgdGhpcyBjaGFwdGVyIGV4cGxvcmVzIHRoZSBvYnNlcnZhdGlvbmFsIGFzc29jaWF0aW9ucyBvZiBpbmNyZWFzZWQgYWRpcG9zaXR5IGFuZCBtZXRhYm9saXRlcy4gVGhlIGNoYXB0ZXIgd2lsbCBmb2N1cyBvbiBjb25mb3VuZGVycy4KCiMjIyMjIFByb2dyZXNzCk5vdCBzdGFydGVkLiBJIG5vdyBoYXZlIGFjY2VzcyB0byBVSyBCaW9iYW5rIGRhdGEgYW5kIHdlIHNob3VsZCBoYXZlIGFjY2VzcyB0byB0aGUgbWV0YWJvbG9taWNzIGRhdGEgaW4gdGhlIGNvbWluZyBtb250aHMuCgpcICAKCiMjIyMgQ2hhcHRlciA1OiBNUiBzdGVwIDEKIyMjIyMgT3ZlcnZpZXcKVGhpcyBjaGFwdGVyIGlzIHRoZSBmaXJzdCBzdGVwIG9mIHRoZSBNUiBwcm9jZXNzIGluIGlkZW50aWZ5aW5nIGludGVybWVkaWF0ZSBtZXRhYm9saXRlcy4gVGhlIG1haW4gYW5hbHlzaXMgaW5jbHVkZXMgMyBleHBvc3VyZXMgYW5kIDEyMyBtZXRhYm9saXRlcyBmcm9tIEtldHR1bmVuIGV0IGFsICgyMDE2KVtAS2V0dHVuZW4yMDE2XSBBZGRpdGlvbmFsIHNlbnNpdGl2aXR5IGFuYWx5c2lzIG9mIDE3IG90aGVyIG1lYXN1cmVzIG9mIGFkaXBvc2l0eSBhbmQgNCBtZXRob2RzIGhhcyBhbHNvIGJlZW4gcGVyZm9ybWVkLiBUaGUgdG90YWwgbnVtYmVyIG9mIHRlc3RzIHBlcmZvcm1lZCBpcyBgciAyMCoxMjMqNGAuIEluIGFkZGl0aW9uIHRvIHRoaXMgSSBoYXZlIHBlcmZvcm1lZCB0aGUgc2FtZSBhbmFseXNpcyB3aXRoIGFuIGFkZGl0aW9uYWwgbWV0YWJvbGl0ZSBkYXRhIHNldCBvZiA0NTIgbWV0YWJvbGl0ZXNbQFNoaW4yMDE0XSAoYHIgMjAqNDUyKjRgIHRvdGFsIHRlc3RzKSAtIEkgdGhpbmsgdGhpcyBzZWNvbmQgYW5hbHlzaXMgd2lsbCBwcm9iYWJseSBub3QgYmUgaW5jbHVkZWQgaW4gdGhlIHRoZXNpcyBhcyB0aGUgbWV0YWJvbGl0ZSBHV0FTIGlzIG5vdCBhcyB3ZWxsIHBvd2VyZWQgb3IgY2xlYW4gYXMgdGhlIEtldHR1bmVuZSBtZXRhYm9saXRlIEdXQVMuCgojIyMjIyBQcm9ncmVzcwpJIGFtIDIvMyBvZiB0aGUgd2F5IHRocm91Z2ggdGhlIG1hbnVzY3JpcHQgd2hpY2ggaGFzIGJlZW4gd3JpdHRlbiBhcyBpZiBpIHdhcyB3cml0aW5nIHRoZSBjaGFwdGVyLiBJIG5lZWQgdG8gZmluaXNoIHRoZSBtYW51c2NyaXB0IGFuZCB0cmFuc2ZlciB0aGlzIGludG8gdGhlIGNoYXB0ZXIgYW5kIHRoZW4gY3V0IHRoZSBtYW51c2NyaXB0IGRvd24gdG8gZm9ybSBhIHB1Ymxpc2hhYmxlIGRvY3VtZW50LiBUaGlzIHByb2plY3QgaXMgbXkgZmlyc3QgaW4gYXR0ZW1wdGluZyB0byBiZSBjb21wbGV0ZWx5IHJlcHJvZHVjaWJsZSB3aXRoIG15IGNvZGUgYW5kIGlzIGxhaWQgb3V0IGluIGZ1bGwgb24gR2l0SHViIChjdXJyZW50bHkgcHJpdmF0ZSkuIAoKXCAgCgojIyMjIENoYXB0ZXIgNjogTVIgVml6CiMjIyMjIE92ZXJ2aWV3CkhhdmluZyBwZXJmb3JtZWQgYSBsYXJnZSBNUiBhbmFseXNpcyBvZiAzIGV4cG9zdXJlcyBhbmQgMTIzIG91dGNvbWVzIChgciAzKjEyM2AgdGVzdHMpIGFzIHRoZSBtYWluIGFuYWx5c2lzLCBwbHVzIHNlbnNpdGl2aXR5IGFuYWx5c2lzIGZvciAzIG1ldGhvZHMgKGByIDMqMTIzKjRgKSBhbmQgYW4gYWRkaXRpb25hbCAxNyBtZWFzdXJlcyBvZiBhZGlwb3NpdHkgKGByIDE3KjEyM2ApIGVhY2ggd2l0aCAzIGFkZGl0aW9uYWwgbWV0aG9kcyAoYHIgMTcqMTIzKjRgKSB0aGUgdG90YWwgbnVtYmVyIG9mIHRlc3RzIGlzIGByIDIwKjEyMyo0YC4gSXQgaXMgZGlmZmljdWx0IHRvIHZpc3VhbGlzZSBhbmQgaW50ZXJwcmV0IGFsbCBvZiB0aGlzIGRhdGEuIEdpdmVuIHRoYXQgd2Ugd2FudCB0byBsb29rIGF0IHRoZSBnbG9iYWwgcHJvZmlsZSBvZiBtZXRhYm9saXRlIGNoYW5nZXMgYXMgYSByZXN1bHQgb2YgaW5jcmVhc2VkIGFkaXBvc2l0eSB3ZSBuZWVkIHRvIGJlIGFibGUgdG8gdmlzdWFsaXNlIHRoaXMgZGF0YSBpbiBhbiBpbnRlcnBlcmF0ZWJsIG1hbm5lci4gVGhpcyBjaGFwdGVyIGRlbW9uc3RyYXRlcyBhIHdlYiBhcHBsaWNhdGlvbiBhbmQgYFJgIHBhY2thZ2UgZGV2ZWxvcGVkIHRvIGNyZWF0ZSBDaXJjb3MgcGxvdHMgdG8gdmlzdWFsaXNlIGFuZCBpbnRlcnByZXQgdGhlc2UgdHlwZXMgb2YgTVIgYW5hbHlzZXMuCgojIyMjIyBQcm9ncmVzcwpJIGFtIDIvMyBvZiB0aGUgd2F5IHRocm91Z2ggdGhlIG1hbnVzY3JpcHQuIFRoZSBtYW51c2NyaXB0IGFuZCB0aGUgR2l0SHViIHBhZ2Ugd2lsbCBiZSBhZGFwdGVkIHRvIGZvcm0gdGhlIGNoYXB0ZXIgc28gMi8zIG9mIHRoZSBjaGFwdGVyIGlzIGNvbXBsZXRlIGVzc2VudGlhbGx5LiBUaGUgd2ViIGFwcGxpY2F0aW9uIGlzIGluIGEgYmV0YSBzdGFnZSBhbmQgaXMgW3VzZWFibGVdKGh0dHBzOi8vbWF0dGxlZS5zaGlueWFwcHMuaW8vMDExX21yX3Zpei8pIC0gSSBuZWVkIHRvIGRvIHNvbWUgZm9jdXMtZ3JvdXAgd29yayB3aXRoIHRoZSBncm91cCB0byBtYWtlIHRoZSB3ZWJzaXRlIHVzZXIgZnJpZW5kbHkgYW5kIGluY29ycG9yYXRlIGFueSBhZGRpdGlvbmFsIGZlYXR1cmVzL3dvcmRpbmcgdGhleSB0aGluayBpcyBuZWVkZWQuIFRoZSBgUmAgcGFja2FnZSBpcyBhdmFpbGFibGUgb24gW0dpdEh1Yl0oaHR0cHM6Ly9naXRodWIuY29tL21hdHRsZWU4MjEvRXBpQ2lyY29zKSBhbmQgaXMgaW4gdGhlIGZpbmFsIHN0YWdlIHdpdGggdGVzdGluZyBuZWVkaW5nIGRvaW5nLiBBbGwgb2YgdGhpcywgaW5jbHVkaW5nIHRoZSBtYW51c2NyaXB0LCBzaG91bGQgYmUgZmluaXNoZWQgd2l0aGluIHRoZSBuZXh0IHR3byBtb250aHMsIEkganVzdCBuZWVkIHRvIGdldCBzb21lIHBlb3BsZSB0b2dldGhlciB0byBwbGF5IGFyb3VuZCB3aXRoIHRoZSBhcHAgYW5kIGBSYCBwYWNrYWdlIHRvIG1ha2Ugc3VyZSBpdCB3b3JrcyBhbmQgZG9lc250IGJyZWFrLgoKYGBge3IgZWNobz1GQUxTRSwgb3V0LndpZHRoPScxMDAlJywgZmlnLmNhcD0iQ2lyY29zIHBsb3QgcHJvZHVjZWQgdXNpbmcgUiBwYWNrYWdlIGZyb20gYW5hbHlzaXMgcGVyZm9ybWVkIGluIENoYXB0ZXIgNSJ9CmtuaXRyOjppbmNsdWRlX2dyYXBoaWNzKCIuLi8uLi8uLi8wMTFfTVJfVml6L3d3dy9nYWxsZXJ5L2NpcmNvc19leGFtcGxlMS5wbmciKQpgYGAKClwgIAoKIyMjIyBDaGFwdGVyIDc6IENsdXN0ZXJpbmcgbWV0YWJvbGl0ZXMKIyMjIyMgT3ZlcnZpZXcKSGF2aW5nIGlkZW50aWZpZWQgbWV0YWJvbGl0ZXMgYXNzb2NpYXRlZCB3aXRoIGluY3JlYXNlZCBhZGlwb3NpdHkgZnJvbSB2aXN1YWxpc2luZyB0aGUgZ2xvYmFsIHByb2ZpbGUgd2UgbmVlZCB0byBkZWNpZGUgaG93IHRvIGluc3RydW1lbnQgdGhlbSBpbiB0aGUgc2Vjb25kIHN0ZXAgb2YgdGhlIE1SIGFuYWx5c2lzLiBUaGVyZSBhcmUgaW4gZXNzZW5jZSB0d28gd2F5cyB0byBkbyB0aGlzLCBlaXRoZXIgdXNlIGVhY2ggbWV0YWJvbGl0ZSBpbmRpdmlkdWFsbHkgYXMgb25lIHdvdWxkIG5vcm1hbGx5IG9yIGNvbWJpbmUgbWV0YWJvbGl0ZXMgaW50byBhIGdyb3VwIHRoYXQgb25lIHRoZW4gaW5zdHJ1bWVudHMuIEluIGNoYXB0ZXIgOSBJIHdpbGwgdXNlIGJvdGggaW5kaXZpZHVhbCBtZXRhYm9saXRlcyBhbmQgZ3JvdXBzLiBJbiB0aGlzIGNoYXB0ZXIgSSB3aWxsIGV4cGxvcmUgYSBudW1iZXIgb2YgZGlmZmVyZW50IG1ldGhvZHMgZm9yIGNsdXN0ZXJpbmcgbWV0YWJvbGl0ZXMgaW50byBncm91cHMgdGhhdCBjYW4gYmUgaW5zdHJ1bWVudGVkLiAKCiMjIyMjIFByb2dyZXNzCk5vdCBzdGFydGVkLiBDdXJyZW50IGlkZWFzIGZvciBjbHVzdGVyaW5nIG1ldGhvZHMgdG8gZXhwbG9yZToKCiogUHJpb3JzCiAgKiBjbGFzcwogICogc3ViY2xhc3MKICAqIGJpb2xvZ2ljYWwgcGF0aHdheQogICogc2l6ZQogICogc2hhcmVkIGdlbmV0aWMgdmFyaWFudHMKKiBObyBwcmlvcnMKICAqIFBDQQogICogZmFjdG9yIGFuYWx5c2lzCiAgKiBIaWVyYXJjaGljYWwgY2x1c3RlcmluZwogICogZGVuc2l0eSBjbHVzdGVyaW5nCiAgKiBzZWxmIG9yZ2FuaXNpbmcgbWFwCiAgKiBMRFNSCiAgKiBvbnRvbG9neQogICAgKiBoYXZlIGRpc2N1c3NlZCB3aXRoIEJlbiBFbHN3b3J0aCAtIGEgcGlwZWxpbmUgaXMgc2V0LXVwIHRoYXQgY2FuIGJlIGFkcGF0ZWQgdG8gaW1wbGVtZW50IHRoaXMgYW5kIHdvdWxkIGJlIGFuIGludGVyZXN0aW5nIGNhc2Ugc3R1ZHkgZm9yIHRoZWlyIHBhcGVyLgoKT25jZSBjbHVzdGVyZWQgdGhlIGdyb3VwIG9mIG1ldGFib2xpdGVzIHdvdWxkIHRoZW4gYmUgdHJlYXRlZCBhcyB0aGUgZ3JvdXAgaW4gYW4gTVIgYW5hbHlzaXMgYW5kIHRoZSBnZW5ldGljIHZhcmlhbnRzIGZvciBlYWNoIG1ldGFib2xpdGUgaW4gdGhlIGdyb3VwIHdvdWxkIGJlIHVzZWQgdG8gaW5zdHJ1bWVudCB0aGUgZ3JvdXAuIAoKXCAgCgojIyMjIENoYXB0ZXIgODogSW5zdHJ1bWVudGF0aW9uCiMjIyMjIE92ZXJ2aWV3CkhhdmluZyBub3cgZXhwbG9yZWQgdGhlIGRpZmZlcmVudCBtZXRob2RzIGZvciBjbHVzdGVyaW5nIHRoZSBtZXRhYm9saXRlcyB3ZSBuZWVkIHRvIGVzdGFibGlzaCB0aGUgcnVsZXMgZm9yIGhvdyB0byB0aGVuIGluc3RydW1lbnQgdGhlc2UgZGlmZmVyZW50IHR5cGVzIG9mIGNsdXN0ZXJzLiBUaGlzIGNoYXB0ZXIgd2lsbCBsYXlvdXQgYSBzZXQgb2YgcnVsZXMgZm9yIGluc3RydW1lbnRpbmcgbWV0YWJvbGl0ZXMgaW4gTVIgYW5hbHlzaXMuIEl0IHdpbGwgZ2l2ZSB1c2UgY2FzZXMuIFRoaXMgaXMgYSBjb250aW51YXRpb24gb2YgQ2hhcHRlciA3IGFuZCBpdCBmZWVscyBsaWVrIGEgZGlzdGluY3QgY2hwYXRlciBhdCB0aGUgbW9tZW50IGJ1dCB3aGVuIG1vcmUgd29yayBoYXMgYmVlbiBkb25lIGl0IGNvdWxkIGJlIGNvbWJpbmVkIHdpdGggQ2hhcHRlciA3LgoKIyMjIyMgUHJvZ3Jlc3MKTm90IHN0YXJ0ZWQuCgpcICAKCiMjIyMgQ2hhcHRlciA5OiBNUiBzdGVwIDIKIyMjIyMgT3ZlcnZpZXcKSGF2aW5nIG5vdyBpZGVudGlmaWVkIG1ldGFib2xpdGVzIGFzc29jaWF0ZWQgd2l0aCBpbmNyZWFzZWQgYWRpcG9zaXR5LCBtZXRhYm9saXRlIGNsdXN0ZXJzLCBhbmQgaG93IHRvIGlzbnRydW1lbnQgY2x1c3RlcnMgd2UgY2FuIHBlcmZvcm0gdGhlIHNlY29uZCBzdGVwIG9mIHRoZSBNUiBpbnZlc3RpZ2F0aW5nIG1ldGFib2xpdGUgYXNzb2NpYXRpb25zIHdpdGggZGlzZWFzZXMuIEl0IHdpbGwgYmUgcG9zc2libGUgdG8gcnVuIHRoZSBNUiBhZ2FpbnN0IGFsbCBkaXNlYXNlcyBpbiBNUiBCYXNlIGFuZCB0aGlzIHdpbGwgYmUgcHJlc2VudGVkIGluIGEgc2VhcmNoYWJsZSBkYXRhYmFzZSBvbmxpbmUuIFdlIHdpbGwgb25seSBkaXNjdXNzIGRpc2Vhc2VzIGlkZW50aWZpZWQgaW4gdGhlIHN5c3RlbWF0aWMgcmV2aWV3IGhvd2V2ZXIuCgojIyMjIyBQcm9ncmVzcwpXb3JraW5nIHdpdGggQmVuIEVsc3dvcnRoIHRvIGNhdGVnb3Jpc2UgYWxsIE1SIEJhc2UgR1dBU3MgaW50byBjYXRlZ29yaWVzIGZvciBlYXN5IHN1YnNldHRpbmcgdG8gcGVyZm9ybSBhbmFseXNpcyBvbiBmb3IgZXhhbXBsZSBhbGwgYW50aHJvcG9tZXRyaWMgdHJhaXRzIHdpdGggYWxsIHNtb2tpbmcgdHJhaXRzLiBJIGhhdmUgdGhlIGdyb3VuZCB3b3JrIGZvciB0aGUgY29kZSBjb21wbGV0ZWQgZm9yIHRoaXMgYW5hbHlzaXMgYW5kIHdpbGwgdGVzdCB1c2luZyBhIGZldyBtZXRhYm9saXRlcyBhbmQgYSBmZXcgZGlzZWFzZXMgZm9yIHdoaWNoIHdlIGtub3cgdGhlcmUgaXMsIGlzbnQgYW5kIGFyZSB1bnN1cmUgb2YgdGhlIGFzc29jaWF0aW9uLiBUaGUgY29kZSBpcyBzY2FsYWJsZSBzbyBvbmNlIENoYXB0ZXI3LzggYXJlIGNvbXBsZXRlIHRoZSBjb2RlIGNhbiBiZSBydW4gYW5kIGNvbXBsZXRlZCBvdmVyIGEgd2Vlay4KClwgIAoKIyMjIyBDaGFwdGVyIDEwOiBEaXNjdXNzaW9uL2xpbWl0YXRpb25zL2NvbmNsdXNpb24KIyMjIyMgT3ZlcnZpZXcKVGhpcyBjaGFwdGVyIHdpbGwgdGllIGV2ZXJ5dGhpbmcgdG9nZXRoZXIgYW5kIHByZXNlbnQgYSBkaWFncmFtIHRoYXQgb3V0bGluZXMgdGhlIHBpcGVsaW5lIGZvciBwZXJmb3JtaW5nIE1SIGFuYWx5c2lzIG9mIHRoaXMgdHlwZS4KCiMjIyMjIFByb2dyZXNzCk5vdCBzdGFydGVkLi4uLgoKXCAgCgojIyMgT3RoZXIKIyMjIyBDb3Vyc2VzCkkgaGF2ZSBiZWVuIG9uIGEgbnVtYmVyIG9mIGNvdXJzZXMgdGhpcyB5ZWFyIChzaG93biBpbiBmaWd1cmUpLiBJIHBsYW4gb24gZ29pbmcgb24gLi4uLi4uLi4uLi4KCmBgYHtyIGVjaG89RkFMU0UsIG91dC53aWR0aD0nMTAwJSd9CmtuaXRyOjppbmNsdWRlX2dyYXBoaWNzKCJ0cmFpbmluZy5wbmciKQpgYGAKCiMjIyMgQ29uZmVyZW5lcy8gcHJlc2VudGF0aW9ucwpJIGhhdmUgcHJlc2VudGVkIG15IHdvcmsgYXQgdGhlIGZvbGxvd2luZzoKCiogRmFjdWx0eSBvZiBIZWFsdGggU2NpZW5jZXMgcmVzZXJhY2ggc2hvd2Nhc2UsICoqcHJlc2VudGF0aW9uKiogLSBbTWV0YWJvbGl0ZSBwcm9maWxlcyBhcyBtYXJrZXJzIG9mIHJpc2tdKGh0dHBzOi8vbWF0dGxlZTgyMS5naXRodWIuaW8vcG9zdGVyc19wcmVzZW50YXRpb25zLzIwMTkvRm9IU19zaG93Y2FzZV8yMDE5LnBkZikKKiBGYWN1bHR5IG9mIEhlYWx0aCBTY2llbmNlcyByZXNlcmFjaCBzaG93Y2FzZSwgKipwb3N0ZXIqKiAtIFtNZXRhYm9saXRlIHByb2ZpbGluZyBvZiBtdWx0aXBsZSBtZWFzdXJlcyBvZiBhZGlwb3NpdHk6IEEgTWVuZGVsaWFuIHJhbmRvbWl6YXRpb24gYW5hbHlzaXNdKGh0dHBzOi8vbWF0dGxlZTgyMS5naXRodWIuaW8vcG9zdGVyc19wcmVzZW50YXRpb25zLzIwMTkvbWV0YWJvbG9taWNzXzIwMTkucGRmKQoqIE1ldGFib2xvbWljcyAyMDE5LCAqKnBvc3RlcioqIC0gW01ldGFib2xpdGUgcHJvZmlsaW5nIG9mIG11bHRpcGxlIG1lYXN1cmVzIG9mIGFkaXBvc2l0eTogQSBNZW5kZWxpYW4gcmFuZG9taXphdGlvbiBhbmFseXNpc10oaHR0cHM6Ly9tYXR0bGVlODIxLmdpdGh1Yi5pby9wb3N0ZXJzX3ByZXNlbnRhdGlvbnMvMjAxOS9tZXRhYm9sb21pY3NfMjAxOS5wZGYpCiogTVIgY29uZmVyZW5jZSAyMDE5LCAqKnBvc3RlcioqIC0gW01SLVZpczogQSB0b29sIGZvciB0aGUgdmlzdWFsaXNhdGlvbiBvZiBoaWdoLWRpbWVuc2lvbmFsIE1lbmRlbGlhbiByYW5kb21pemF0aW9uIHJlc3VsdHNdKGh0dHBzOi8vbWF0dGxlZTgyMS5naXRodWIuaW8vcG9zdGVyc19wcmVzZW50YXRpb25zLzIwMTkvTVJfY29uZmVyZW5jZV8yMDE5LnBkZikKCiMjIyMgVGVhY2hpbmcKSSBoYXZlIHRhdWdodCBvbiB0aGUgZm9sbG93aW5nOgoKKiBNZW5kZWxpYW4gcmFuZG9taXphdGlvbiwgQnJpc3RvbCBNZWRpY2FsIFNjaG9vbCBzaG9ydCBjb3Vyc2UKKiBNZW5kZWxpYW4gcmFuZG9taXphdGlvbiBjb25mZXJlbmNlIE1SIGNvdXJzZSwgY29uZmVyZW5jZSB3b3Jrc2hvcAoqIEludHJvZHVjdGlvbiB0byBSLCBCcmlzdG9sIE1lZGljYWwgU2Nob29sIHNob3J0IGNvdXJzZQoqIEludHJvZHVjdGlvbiB0byBkYXRhIHZpc3VhbGlzYXRpb24gYW5kIHdlYiBhcHBsaWNhdGlvbnMgdXNpbmcgUiwgQnJpc3RvbCBNZWRpY2FsIFNjaG9vbCBzaG9ydCBjb3Vyc2UKKiBBIG9uZSB3ZWVrIGNvdXJzZSBhdCB0aGUgVW5pdmVyc2l0eSBvZiBQYXZpYSBXaXRoIEthaXRsaW46IENhdXNhbCBJbmZlcmVuY2UgYW5kIE1lbmRlbGlhbiByYW5kb21pemF0aW9uLCBEZXBhcnRtZW50IG9mIEJyYWluIGFuZCBCZWhhdmlvdXJhbCBTY2llbmNlcywgVW5pdmVyc2l0eSBvZiBQYXZpYSwgSXRhbHkKCiMjIyMgUHVibGljIGVuZ2FnZW1lbnQKSSd2ZSBkb25lIG11Y2ggbGVzcyB0aGFuIGxhc3QgeWVhcjoKCiogQ3JlYXRpdmUgUmVhY3Rpb25zLCBsZWFkIC0gNTAgYXJ0aXN0cyBhbmQgNTAgcmVzZXJhY2hlcnMgd2l0aCA+IDUsMDAwIHZpc2l0b3JzCiogQ3JlYXRpdmUgUmVhY3Rpb25zLCBwYXJ0aWNpcGF0ZWQgLSByZXNlYXJjaCB0dXJuZWQgaW50byBhbiBbYXJ0d29ya10oaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9wL0J4QUlDcURBOTZGLykKKiBUYWxrcyAtIGhhdmUgZ2l2ZW4gYSBudW1iZXIgb2YgdGFsa3MgdG8gdGhlIHB1YmxpYwoqIE1SQyBJRVUgQCBHcmVlbm1hbgoqIH7CozIwLDAwMCBpbiBncmFudHMgYXdhcmRlZCBpbiByZXZpZXcgcGVyaW9kIChpbmNsdWRpbmcgwqMxNCw5ODUgZnJvbSB0aGUgRVBTUkMpCiogTmljIGFuZCBJIGFyZSB3cml0aW5nIGFuIGFwcGxpY2F0aW9uIHRvIHRoZSBXZWxsY29tZSBUcnVzdCB0byBmdW5kIGEgcHVibGljIGVuZ2FnZW1lbnQgcHJvamVjdCBmb3IgdGhlIHJlc2VyYWNoIGdyb3VwIGZvciB+wqM1MCwwMDAKKiBJIGFtIHdvcmtpbmcgd2l0aCBhIHJlc2VyYWNoIGZlbGxvdyBpbiBNYXRocyBvbiBhIGJpZCB0byBBcnRzIENvdW5jaWwgRW5nbGFuZCBmb3IgfsKjNTAsMDAwIC0gc3VwcG9ydGVkIGJ5IEhlYWQgb2YgdGhlIFNjaG9vbCBvZiBBcnRzIGFuZCBNYXRocyBhbmQgdGhlIFBvcHVsYXRpb24gSGVhbHRoIFNjaWVuY2UgSW5zdGl0dXRlCgojIyMgT3RoZXIgd29yawojIyMjIFBsYWNlbWVudApGdW5kcyBoYXZlIGJlZW4gcmVxdWVzdGVkICh0byBleHRlbmQgdGhlIFBoRCBieSB0aHJlZSBtb250aHMpIHRvIGVuYWJsZSBNYXR0aGV3IHRvIHdvcmsgd2l0aCBQcm9mZXNzb3IgUnV0aCBMb29zIGF0IHRoZSBJY2hhbiBTY2hvb2wgb2YgTWVkaWNpbmUgYXQgTW91bnQgU2luYWksIE5ldyBZb3JrIGFuZCB1bmRlcmdvIHRyYWluaW5nIGluIGNvbXB1dGF0aW9uYWwgYW5kIGRhdGEgYW5hbHl0aWNzIHRvIGNoYXJhY3RlcmlzZSB0aGUgZ2VuZXRpY3Mgb2YgYm9keSBjb21wb3NpdGlvbiwgd2hpY2ggd2lsbCBlbmFibGUgaGltIHRvIGV4cGFuZCBoaXMgY3VycmVudCBhbmFseXNpcyBpbnZlc3RpZ2F0aW5nIGFkaXBvc2l0eSAtPiBtZXRhYm9saXRlcyAtPiBkaXNlYXNlcyB0byBtb3JlIGFjY3VyYXRlIG1lYXN1cmVzIG9mIGJvZHkgY29tcG9zaXRpb24uCgpNYXR0aGV3IGhhcyBpbnZlc3RpZ2F0ZWQgdGhlIGVmZmVjdHMgb2YgQk1JIGFuZCBXSFIgYnV0IHRoZSBsYWNrIG9mIHN0cm9uZyBnZW5ldGljIGNoYXJhY3RlcmlzYXRpb24gZm9yIEJGIGxpbWl0cyB0aGUgdW5kZXJzdGFuZGluZyB3ZSBjYW4gZ2FpbiBmcm9tIHRoZXNlIGFuYWx5c2VzLiBNYXR0aGV3IGhhcyBhbHNvIGJlZW4gdXNpbmcgY29tYmluYXRpb25zIG9mIG1lYXN1cmVzIChwcm9maWxlcykgdG8gaW52ZXN0aWdhdGUgdGhlIHVuZGVybHlpbmcgYmlvbG9naWNhbCBtZWNoYW5pc21zIGRyaXZpbmcgYXNzb2NpYXRpb25zIGFuZCBpcyBkZXZlbG9waW5nIHdheXMgdG8gaW52ZXN0aWdhdGUgbWV0YWJvbGl0ZXMgYXMgcHJvZmlsZXMgb2Ygcmlzay4gQ29tYmluaW5nIHRoZSBza2lsbHMsIGV4cGVydGlzZSBhbmQgZGF0YSBvZiBvdXIgYW5kIFByb2Zlc3NvciBMb29z4oCZIGdyb3VwcyB3aWxsIGVuYWJsZSBNYXR0aGV3IHRvIGV4cGFuZCBoaXMgd29yayBpbnRvIEJGLCBhbmQgdGh1cyBnYWluIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGJpb2xvZ2ljYWwgbWVjaGFuaXNtcyBkcml2aW5nIGFzc29jaWF0aW9ucyBiZXR3ZWVuIGluY3JlYXNlZCBhZGlwb3NpdHkgYW5kIGRpc2Vhc2UuCgpNYXR0aGV3IHdpbGwgd29yayB3aXRoIFByb2Zlc3NvciBMb29zLCBhIHdvcmxkIGxlYWRlciBpbiBodW1hbiBnZW5ldGljcyBhbmQgYm9keSBjb21wb3NpdGlvbiwgdG8gZXhwbG9yZSBCRiBnZW5ldGljcyBhbmQgaW5jcmVhc2VkIGFkaXBvc2l0eSBwcm9maWxlcy4gUHJvZmVzc29yIExvb3MgaXMgYSBtZW1iZXIgb2YgdGhlIHN0ZWVyaW5nIGNvbW1pdHRlZSBmb3IgdGhlIGdsb2JhbCBCTUkgZ2Vub21lLXdpZGUgYXNzb2NpYXRpb24gc3R1ZHkgKEdXQVMpIGNvbnNvcnRpYSBhbmQgc2V0LXVwIHRoZSBnbG9iYWwgYm9keSBjb21wb3NpdGlvbiBHV0FTIGNvbnNvcnRpYS4gVGhlIExvb3MgTGFiIGFyZSBhbiBpbnRlcmRpc2NpcGxpbmFyeSB0ZWFtIGFpbWluZyB0byBpZGVudGlmeSBhbmQgY2hhcmFjdGVyaXplIGdlbmVzIHRvIGJldHRlciB1bmRlcnN0YW5kIGJpb2xvZ2ljYWwgcGF0aHdheXMuIFRoZSB0ZWFtIGluY2x1ZGVzIEpKIFdhbmcsIFBvc3Rkb2N0b3JhbCBGZWxsb3csIGhhcyBleHBlcnRpc2UgaW4gaW50ZWdyYXRpbmcgZ2Vub21pY3MgYW5kIG1ldGFib2xvbWljcyBkYXRhOyBBcmRlbiBNb3NjYXRpLCBhIENvbXB1dGF0aW9uYWwgR2VuZXRpY2lzdCwgaGFzIGV4cGVydGlzZSBpbiBldGlvbG9naWNhbCBvdmVybGFwIGJldHdlZW4gdHJhaXRzIGFuZCBkaXNlYXNlczsgRGFpYW5lIEhlbWVyaWNoLCBQb3N0ZG9jdG9yYWwgRmVsbG93LCBoYXMgZXhwZXJ0aXNlIGluIGZpbmUtbWFwcGluZyBhbmQgZnVuY3Rpb25hbCBhbm5vdGF0aW9uLiBNdWNoIG9mIHRoZSBsYWJzIHdvcmsgaXMgY29uZHVjdGVkIGluIEJpb01lLCBhIGJpb2Jhbmsgb2YgfjUwLDAwMCBhbmNlc3RyYWxseSBkaXZlcnNlIChFdXJvcGVhbiAoMzIlKSwgQWZyaWNhbiAoMjQlKSwgSGlzcGFuaWMvTGF0aW5vICgzNSUpIGFuZCBvdGhlci9taXhlZCBhbmNlc3RyaWVzICg5JSkpIGluZGl2aWR1YWxzLgoKTWF0dGhldyB3aWxsIGNvbnRyaWJ1dGUgdG8gY2hhcmFjdGVyaXppbmcgdGhlIGdlbmV0aWNzIG9mIEJGIHVzaW5nIHdob2xlIGdlbm9tZSBhbmQgZXhvbWUgc2VxdWVuY2UgZGF0YS4gVGhpcyB3aWxsIGludm9sdmUgdGhlIHVzZSBvZiBmaW5lLW1hcHBpbmcsIGNvLWxvY2FsaXNhdGlvbiBhbmQgaW50ZWdyYXRlZCBhcHByb2FjaGVzIHRvIGludmVzdGlnYXRlIHRoZSBnZW5ldGljcyBvZiBtdWx0aXBsZSBtZWFzdXJlcyBvZiBib2R5IGNvbXBvc2l0aW9uLiBUaGlzIHBsYWNlbWVudCwgZGlzY3Vzc2VkIGFuZCBhZ3JlZWQgd2l0aCBQcm9mZXNzb3IgTG9vcywgaXMgYSBuYXR1cmFsIGFuZCB2YWx1YWJsZSBwcm9ncmVzc2lvbiBvZiBNYXR0aGV34oCZcyB3b3JrIHRvIGRldmVsb3Agb3VyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIG1lY2hhbmlzbXMgZHJpdmluZyBkaXNlYXNlIHJpc2suIFdpdGggVUsgQmlvYmFuayBkdWUgdG8gcmVsZWFzZSBtZXRhYm9saXRlIGRhdGEgYXQgYSBzaW1pbGFyIHRpbWUsIHRoZSBwbGFjZW1lbnQgd2lsbCBwcm92aWRlIHRoZSBhcHByb3ByaWF0ZSBkYXRhIGFuZCBza2lsbHMgdG8gKGkpIGlkZW50aWZ5IGdlbmV0aWMgdmFyaWFudHMgZm9yIE1SIGludmVzdGlnYXRpb25zIG9mIG1ldGFib2xpdGVzIGFuZCBkaXNlYXNlcyBhbmQgKGlpKSB0byBpbnRlZ3JhdGUgdGhlc2UgZ2VuZXRpYyB2YXJpYW50cyB3aXRoIHRoZSBtZXRhYm9sb21pY3Mgd29yayBhbHJlYWR5IGNvbXBsZXRlZCBhbmQgdG8gYmUgcGVyZm9ybWVkIGluIFVLIEJpb2JhbmsuIAoKCiMjIyMgR1dBUyBvZiBnbHljb3N1cmlhCldlIGNvbmR1Y3RlZCBhIGdlbm9tZS13aWRlIGFzc29jaWF0aW9uIHN0dWR5IChHV0FTKSBvZiBnbHljb3N1cmlhIChzdWdhciBpbiB1cmluZSkgaW4gcHJlZ25hbnQgbW90aGVycyBmcm9tIHRoZSBBdm9uIExvbmdpdHVkaW5hbCBTdHVkeSBvZiBQYXJlbnRzIGFuZCBDaGlsZHJlbiAoQUxTUEFDKS4gRHVlIHRvIGEgbGFjayBvZiBhdmFpbGFibGUgZXh0ZXJuYWwgZGF0YSBzb3VyY2VzIHJlcGxpY2F0aW9uIHdhcyBub3QgcG9zc2libGUsIGluc3RlYWQgd2UgcGVyZm9ybWVkIGEgR1dBUyBpbiB0aGUgTm9ydGhlcm4gRmlubGFuZCBCaXJ0aCBDb2hvcnQgMTk4NiAoTkZCQzE5ODYpIHdoZXJlIHdlIHVzZWQgbW90aGVycyBwaGVub3R5cGUgYW5kIHRoZSBtb3RoZXJz4oCZIG9mZnNwcmluZ3MgZ2Vub3R5cGUuIFRvIGVzdGltYXRlIHRoZSBtYXRlcm5hbCBlZmZlY3RzIGZyb20gb2Zmc3ByaW5nIGdlbm90eXBlcyB3ZSBkb3VibGVkIHRoZSBlZmZlY3QgZXN0aW1hdGVzIGFuZCBzdGFuZGFyZCBlcnJvcnMgb2YgdGhlIEdXQVMgcmVzdWx0c1tAV2FjaG9sZGVyMTk5ODsgQEpvc2hpMjAxNjsgQEpvc2hpMjAxN10uIFRoZSBbR2l0SHViIHJlcG9zaXRvcnldKGh0dHBzOi8vZ2l0aHViLmNvbS9tYXR0bGVlODIxLzAwMV9nbHljb3N1cmlhX0dXQVMpIHByb3ZpZGVzIGFsbCBzY3JpcHRzIGFuZCBkYXRhLiBXZSBhcmUgY3VycmVubHR5IG1ha2luZyByZXZpc2lvbnMgdG8gcmV2aWV3ZXIgY29tbWVudHMuCgojIyMjIyMgQWJzdHJhY3QKR2x5Y29zdXJpYSBpcyBhIGNvbmRpdGlvbiB3aGVyZSBnbHVjb3NlIGlzIGRldGVjdGVkIGluIHVyaW5lIGF0IGhpZ2hlciBjb25jZW50cmF0aW9ucyB0aGFuIG5vcm1hbC4gR2x5Y29zdXJpYSBhdCBzb21lIHBvaW50IGR1cmluZyBwcmVnbmFuY3kgaGFzIGFuIGVzdGltYXRlZCBwcmV2YWxlbmNlIG9mIDUwJSBhbmQgaXMgYXNzb2NpYXRlZCB3aXRoIGFkdmVyc2Ugb3V0Y29tZXMgaW4gYm90aCBtb3RoZXJzIGFuZCBvZmZzcHJpbmcuIExpdHRsZSBpcyBjdXJyZW50bHkga25vd24gYWJvdXQgdGhlIGdlbmV0aWMgY29udHJpYnV0aW9uIHRvIHRoaXMgdHJhaXQgb3IgdGhlIGV4dGVudCB0byB3aGljaCBpdCBvdmVybGFwcyB3aXRoIG90aGVyIHNlZW1pbmdseSByZWxhdGVkIHRyYWl0cywgZS5nLiBkaWFiZXRlcy4gV2UgcGVyZm9ybWVkIGEgZ2Vub21lLXdpZGUgYXNzb2NpYXRpb24gc3R1ZHkgKEdXQVMpIGZvciBzZWxmLXJlcG9ydGVkIGdseWNvc3VyaWEgaW4gcHJlZ25hbnQgbW90aGVycyBmcm9tIHRoZSBBdm9uIExvbmdpdHVkaW5hbCBTdHVkeSBvZiBQYXJlbnRzIGFuZCBDaGlsZHJlbiAoQUxTUEFDOyBjYXNlcy9jb250cm9scz0xLDI0OS81LDE0MCkuIFdlIGlkZW50aWZpZWQgdHdvIGxvY2ksIG9uZSBvZiB3aGljaCAobGVhZCBTTlA9cnMxMzMzNzAzNzsgY2hyb21vc29tZSAxNjsgb2RkcyByYXRpbyAoT1IpIG9mIGdseWNvc3VyaWEgcGVyIGVmZmVjdCBhbGxlbGU6IDEuNDI7IDk1JUNJOiAxLjMwLDEuNTY7IFA9MS45N3gxMC0xMykgd2FzIHRoZW4gdmFsaWRhdGVkIHVzaW5nIGFuIG9ic3RldHJpYy1tZWFzdXJlIG9mIGdseWNvc3VyaWEgbWVhc3VyZWQgaW4gdGhlIHNhbWUgY29ob3J0ICgyMjcvNiw2MzkpLiBXZSBwZXJmb3JtZWQgYSBzZWNvbmRhcnkgR1dBUyBpbiB0aGUgMTk4NiBOb3J0aGVybiBGaW5sYW5kIEJpcnRoIENvaG9ydCAoTkZCQzE5ODY7IDc0Ny8yLDk5MSkgdXNpbmcgbWlkd2lmZS1yZXBvcnRlZCBnbHljb3N1cmlhIGFuZCBvZmZzcHJpbmcgZ2Vub3R5cGUgYXMgYSBwcm94eSBmb3IgbWF0ZXJuYWwgZ2Vub3R5cGUuIFRoZSBlcXVpdmFsZW50IGVmZmVjdCBlc3RpbWF0ZSBmb3IgcnMxMzMzNzAzNyBpbiB0aGlzIGNvaG9ydCB3YXMgT1IgMS41NyAoOTUlIENJOiAxLjMwLDEuODM7IFA9OS44eDEwLTQpLiBJbiBmb2xsb3ctdXAgYW5hbHlzZXMsIHdlIHNhdyBsaXR0bGUgZXZpZGVuY2Ugb2Ygc2hhcmVkIGdlbmV0aWMgdW5kZXJwaW5uaW5ncyB3aXRoIHRoZSBleGNlcHRpb24gb2YgdXJpbmFyeSBhbGJ1bWluLXRvLWNyZWF0aW5pbmUgcmF0aW8gKFJnPTAuNjQ7IFNFPTAuMjI7IFA9MC4wMDQyKSwgYSBiaW9tYXJrZXIgb2Yga2lkbmV5IGRpc2Vhc2UuIEluIGNvbmNsdXNpb24sIHdlIGlkZW50aWZpZWQgYSBnZW5ldGljIGFzc29jaWF0aW9uIHdpdGggc2VsZi1yZXBvcnRlZCBnbHljb3N1cmlhIGR1cmluZyBwcmVnbmFuY3ksIHdpdGggdGhlIGxlYWQgU05QIGxvY2F0ZWQgMTVrQiB1cHN0cmVhbSBvZiBTTEM1QTIsIGEgdGFyZ2V0IG9mIGFudGlkaWFiZXRpYyBkcnVncy4gVGhlIGxhY2sgb2Ygc3Ryb25nIGdlbmV0aWMgY29ycmVsYXRpb24gd2l0aCBzZWVtaW5nbHkgcmVsYXRlZCB0cmFpdHMgc3VjaCBhcyB0eXBlIDIgZGlhYmV0ZXMgc3VnZ2VzdHMgZGlmZmVyZW50IGdlbmV0aWMgcmlzayBmYWN0b3JzIGV4aXN0IGZvciBnbHljb3N1cmlhIGR1cmluZyBwcmVnbmFuY3kuIAoKYGBge3IgZWNobz1GQUxTRSwgb3V0LndpZHRoPScxMDAlJywgZmlnLmNhcD0iTWFuaGF0dGFuIHBsb3Qgb2YgYSBHV0FTIG9mIGdseWNvc3VyaWEgaW4gQUxTUEFDIG1vdGhlcnMifQprbml0cjo6aW5jbHVkZV9ncmFwaGljcygiZ2x5Y29zdXJpYV9tYW5oYXR0YW5fcGxvdC5wbmciKQpgYGAKCgoKCiMjIFR1cm5pdGluCipBIGNvcHkgb2YgdGhlIFR1cm5pdGluIHJlcG9ydCBvZiB5b3VyIGVuZCBvZiB5ZWFyIHJlcG9ydCDigJMgYWZ0ZXIgY29tcGxldGluZyB5b3VyIGVuZCBvZiB5ZWFyIHJlcG9ydCB5b3Ugc2hvdWxkIHN1Ym1pdCBpdCB0byBUdXJuaXRpbiB2aWEgQmxhY2tib2FyZCBhcyBwZXIgdGhlIGluc3RydWN0aW9ucyBwcm92aWRlZCBkdXJpbmcgeW91ciBpbmR1Y3Rpb24uIElmIHlvdSBhcmUgdW5zdXJlIGFib3V0IGhvdyB0byBkbyB0aGlzIHBsZWFzZSBjb250YWN0IHlvdXIgUG9zdGdyYWR1YXRlIFR1dG9yIGFuZC9vciB5b3VyIFNjaG9vbOKAmXMgR3JhZHVhdGUgRGlyZWN0b3JzLiBBZnRlciBzdWJtaXR0aW5nIHlvdXIgcmVwb3J0IFR1cm5pdGluIHdpbGwgZ2VuZXJhdGUgYSBzaW1pbGFyaXR5IHJlcG9ydCB3aGljaCBjYW4gYmUgZG93bmxvYWRlZC4gUGxlYXNlIHJldmlldyB0aGlzLCBkaXNjdXNzIGFueSBjb25jZXJucyB3aXRoIHlvdXIgc3VwZXJ2aXNvciBhbmQgc3VibWl0IGEgY29weSB3aXRoIHlvdXIgZW5kIG9mIHllYXIgcHJvZ3Jlc3MgcmVwb3J0LioKCiMjIFByZXNlbnRhdGlvbgpbTGluayB0byBwcmVzZW50YXRpb25dKGh0dHBzOi8vZ2l0aHViLmNvbS9tYXR0bGVlODIxLzAwMF90aGVzaXMvdHJlZS9tYXN0ZXIvcmV2aWV3cy95ZWFyMi9hbm51YWxfcmV2aWV3X3ByZXNlbnRhdGlvbl95ZWFyMi5wZGYpCgoKIAojIyBSZWZlcmVuY2VzCg==